一文看懂hive中group by rollup/cube group by sets用法及区别(附案例)

本文详细介绍了Hive中的GROUP BY、GROUP BY ROLLUP、GROUP BY CUBE和GROUP BY GROUPING SETS的用法,并通过实例解析了它们的区别和应用场景。通过各种分组操作,可以实现不同级别的数据汇总,包括单级、多级以及所有可能的组合。GROUPING__ID字段在理解分组结果中起到关键作用。
摘要由CSDN通过智能技术生成

一文看懂hive中group by rollup/cube group by sets用法及区别(附案例)

有的放矢,先有需求,再有解决方案,直接上案例

测试表
分数表

CREATE TABLE TEST_GROUP(
name   string  comment '姓名',
syear  string  comment '学年',
course string  comment '科目',
score  int     comment '分数'); 

测试数据

INSERT OVERWRITE TABLE  TEST_GROUP VALUES
('李四','2020','数学','50'),
('李四','2020','语文','40'),
('李四','2019','语文','40'),
('钱琪','2020','数学','20'),
('钱琪','2021','语文','50'),
('狗勾','2020','语文','100');

GROUP BY用法

本文的基础,group by
需求一:
查询每名同学每个学年的总分数

分析:我们需要将相同名称,相同学年的数据放入一组,然后将分数汇总相加。
sql代码

SELECT 
name,syear,
SUM(score) as sumscore
FROM test_group 
GROUP BY name,syear;

结果

name syear sumscore
李四 2019 40
李四 2020 90
狗勾 2020 100
钱琪 2020 20
钱琪 2021 50

可以看到,group by根据分组key(name,syear)进行分组,通过聚合函数,将其他字段进行聚合,最终得出结果

需求二
1.查找 每名同学 每个学年 每个学科 的分数
2.查找 每名同学 每个学年 的总分
3.查找 每名同学 的总分
4.查找 所有记录 的总分
ps: 查询结果一次返回

这个需求我们用group by 可不可以实现呢?
当然可以,我们拆分来看
1.查找 每名同学 每个学年 每个学科 的分数
这个比较简单

SELECT 
name,syear,course,
SUM(score) as sumscore
FROM test_group 
GROUP BY name,syear,course;

结果

name syear course sumscore
李四 2019 语文 40
李四 2020 数学 50
李四 2020 语文 40
狗勾 2020 语文 100
钱琪 2020 数学 20
钱琪 2021 语文
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值