一.Hive聚合运算–group by
- group by 用于分组
Hive基本内置聚合函数与group by一起使用
如果没有指定group by字句,默认聚合整个表
除聚合函数外,所选的其他列也必须包含在group by中
group by支持使用case when或表达式
支持按位编号分组
set hive.groupby.orderby.position.alias=true;
二.聚合函数-having
having:对group by聚合结果的条件过滤
- 可以避免在group by之后使用子查询
- having 之后可以使用表达式,不建议
三.Hive聚合运算-基础聚合
1.使用内置聚合函数进行数据聚合
- max,min,count,sum,avg
- collect_set,collect_list: 返回每个组列中对象集/列表
- 与group by 一起使用,可应用于列或者表达式
- 没有group by则按所有列聚合
- select 的列必须包含在group by中
- 对null的聚合为0
select count(null)=0
四.Hive聚合运算:高级聚合-1
1.group sets
- 实现对同一数据集进行多重group by操作
- 本质是多个group by进行union all操作
五.Hive聚合运算-高级聚合-2
group by with cube|rollup
- cube:对分组列进行所有可能组合的聚合
- rollup:计算维度层次级别上的聚合
六.示例:
素材
1,andy,18
2,lily,20
3,tom,21
4,joke,20
5,david,19
6,nick,20
建表语句
create table student(
id int,
name string,
age int)
row format delimited
fields terminated by ','
lines terminated by '\n';
(1)
select count(null) from student;
(2)
select name,age from student group by age,name having age>18;
(3)
select id,age,count(name) from student s group by id,age grouping sets(id,age);
分别对id 和age进行分组
(4)
select id,age,count(name) from student s group by id,age with cube;
(5)
select id,age,count(name) from student s group by id,age with rollup;