一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
上一篇文章介绍了hive函数中的avg、percentile和percentile_approx这几种聚合函数,本文继续介绍几种聚合函数,包括count、sum,这两个函数非常重要并且实用,我敢保证这几个函数在日常的sql开发中一定会用到,因为这就是统计数量和求和的。
聚合函数
1、count 统计函数 作用:统计行条数
常见使用方法 :count(),count(expr),count(DISTINCT expr[, expr *.])
具体功能描述:日常需要将一张竖表转换为一张横表的时候,就可以用到count,一般会搭配着group by一起使用。比如统计某一个维度数据的行条数总和,就可以写成count(expr),并且将其他select里面的字段都要group by起来,否则会报错。该函数的返回结果类型是int ,count()的方式会默认统计包括 NULL 值的行,count(expr) 会返回指定字段的非空值的个数;其中也可以对字段做去重处理,count(DISTINCT expr[, expr*.]) 就是返回指定字段的不同的非空值的个数。
也可以结合临时表的逻辑,先在临时表中将需要统计的新字段行数汇总出来,再最后group by中按组分类后count汇总出来。
select count(*) from test; -- 对T不去重计数
>> 10
select count(distinct t) from test; -- 对T去重后计数
>> 8
select count(distinct t),f,g from test group by f,g; -- 对T去重后计数 ,按照f和g分组汇总
>> 12
2、sum 求和函数 作用:对字段求和
常见使用方法:sum(col),sum(DISTINCT col)
具体功能描述:sum(col) 该函数的功能就是将col这一列字段的结果集数据相加在一起,该字段的返回结果类型为double ,这个不支持去重处理,但是这个函数的另外一种写法sum(DISTINCT col) ,这是会在统计结果中 对col 的不同值相加获得最后的结果,并且sum函数也是可以结合group by一起使用,作为分组汇总。
select sum(*) from test; -- 对T不去重求和
>> 66
select sum(distinct t) from test; -- 对T去重后求和
>> 52
select sum(distinct t),time from test group by time; -- 对T去重后求和 ,按照time分组
>> 100