hive 中应用的sql小结



1,TRUNCATE和DELETE区别:
(1)TRUNCATE TABLE DDL语言(数据定义语言),无法回退,默认所有的表内容都删除,删除速度比delete快。
(2) DELETE FROM 表名 WHERE 条件,DML语言(数据操作语言),可以回退,可以有条件的删除
(3)TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项
2,round函数用法:
ROUND(123.9994, 3) 值:123.9990 ,ROUND(123.9995, 3) 值:124.0000, ROUND(150.75, 0)值:151.00,ROUND(150.35, 0)值:150.00,
ROUND(123.45, -2)值:100.00,     ROUND(123.45, -3)值:0,          ROUND(623.45, -3)值:1000   --注意事项:小数点后一位为起始位置0
使用 ROUND 截断:第一个语句舍入结果。第二个语句截断结果:ROUND(150.75, 0, 1) 值:150.00,mysql不支持该方法
3,POWER(参数1,参数2),POWER函数进行幂运算,参数1是底,参数2 是次方,比如:POWER(3,4) 返回的是3的4次方。
4,COALESCE()函数:返回参数中第一个非NULL值,select Coalesce(null,null,1,2,null)union 值:1,select Coalesce(111,112,113,114,null)值:111
5,extract()函数
select extract(year from now()) year from call_loan_info -- 2018
select extract(month from now()) month from call_loan_info -- 03月


select extract(year from date'2013-11-30') year from call_loan_info -- 2013
select extract(month from date'2013-11-30') month from call_loan_info -- 11月
select extract(day from date'2013-11-30') day from call_loan_info -- 30日


select extract(hour from timestamp '2013-11-30 20:18:20') hour from call_loan_info -- 20时
select extract(minute from timestamp '2013-11-30 20:18:20') minute from call_loan_info -- 18分
获取两个日期之间的具体时间间隔,extract函数是最好的选择 
select extract(day from dt2-dt1) day 
  ,extract(hour from dt2-dt1) hour 
  ,extract(minute from dt2-dt1) minute 
  ,extract(second from dt2-dt1) second 
from (  
select timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1  
   ,timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2  
from call_loan_info r) r
6,length()
SELECT LENGTH('actual_recover_amount') -- 21统计的是字符串的长度
SELECT LENGTH(actual_recover_amount)-- 5235.23统计的是值的长度
7,SELECT count(user_id),user_id FROM call_loan_info GROUP BY user_id分组的用法,值:80(相同user_id) 13(user_id) -- 8   14
7,OVER(PARTITION BY... ORDER BY...)先把一组数据按照制定的字段进行分割成各种组,然后组内按照某个字段排序。
row_number() over(partition by ... order by ...)对查询结果进行排序
rank() over(partition by ... order by ...)跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank() over(partition by ... order by ...)dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的
count() over(partition by ... order by ...)求分组后的总数。
max() over(partition by ... order by ...)求分组后的最大值。
min() over(partition by ... order by ...)
sum() over(partition by ... order by ...)
avg() over(partition by ... order by ...)求分组后的平均值
first_value() over(partition by ... order by ...)第一个
last_value() over(partition by ... order by ...)最后一个
lag() over(partition by ... order by ...)取出前n行数据。
lead() over(partition by ... order by ...)取出后n行数据。
8,CAST()函数可以进行数据类型的转换,CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔。CAST('123.4' AS int)值为:123,CAST('123.6' AS int) :124
CAST('123.447654' AS decimal(5,2)) :123.45

猜你喜欢

转载自blog.csdn.net/qq_23927391/article/details/79877645