hive优化相关
追加汇总
WITH ROLLUP
SELECT IFNULL(driver_id, "总体") as driver_id,
ROUND(AVG(grade), 1) as avg_grade
FROM tb_get_car_order
WHERE driver_id in (
SELECT driver_id
FROM tb_get_car_order
WHERE DATE_FORMAT(order_time, "%Y-%m")='2021-10' AND ISNULL(fare)
) AND NOT ISNULL(grade)
GROUP BY driver_id
WITH ROLLUP;
随机抽样
#随机抽取10个数据
select * from table1 order by rand() limit 10
日期函数
日期差
- DATEDIFF() 函数返回两个日期之间的天数
时间大的放前面,时间小的放后面
DATEDIFF(enddate,startdate)
- TIMESTAMPDIFF
时间小的放前面,时间大的放后面
TIMESTAMPDIFF相比DATEDIFF增加了一个参数,可以控制时间差的单位(second、minute、hour、day等)
--相差40秒
select TIMESTAMPDIFF(SECOND, '2018-03-20 09:00:00', '2018-03-20 09:00:40');
日期加减
- DATE_ADD() 函数
DATE_ADD(date,INTERVAL expr type)
向日期添加指定的时间间隔
Type |
---|
SECOND |
MINUTE |
HOUR |
DAY |
WEEK |
MONTH |
QUARTER |
YEAR |
增删改
增加数据
- INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO table_name VALUES (值1, 值2,....)
指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。
#把所有的列插入新表
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
#只把希望的列插入新表
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
#select语句是将选择的数据转移到新表中,而insert语句是在已存在的表中插入某行或者某列
- 增加列
ALTER TABLE 表名 ADD COLUMN 列名 属性 【约束】
- 添加主键/索引
#添加主键
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (添加列)
#添加索引
ALTER TABLE 表名 ADD index 索引名 (列名)
删除
- 删除表与删除数据
函数 | 效果 |
---|---|
Truncate和Delete | 删除数据 |
Drop | 删除整个表(结构和数据) |
- 删除列
ALTER TABLE 表名 DROP COLUMN 列名
- 删除表中主键
Alter TABLE 表名 DROP primary key
修改数据
- 修改列的类型信息
ALTER TABLE 表名 CHANGE COLUMN 列名 【新】列名 新属性
- 重命名列
ALTER TABLE 表名字 CHANGE COLUMN 列名 新列名 属性
- 重命名表
ALTER TABLE 表名 RENAME TO 表新名
- 修改列的属性
ALTER TABLE 表名 MODIFY COLUMN 要修改属性的列名 新属性;
视图
建立视图的sql:
(视图里不可以order by)
CREATE VIEW 视图名[(字段1),字段2),(字段3)...]
AS select 语句
#另一种创建视图方法
CREATE ALGORITHM={TEMPTABLE} VIEW
视图名[(字段1),字段2),(字段3)...]
AS select 语句
#其中:[(字段1),字段2),(字段3)...] 可省