背景
一般的分组统计使用group by 完成,但是部分业务场景下,需要不同维度的数据存在在一张表中,即多维统计报表,如果使用group by进行计算,需要使用大量的union all完成,代码冗余比较多,Hive提供一种方便的方法,用来一次性完成这种统计
1、GROUPING SETS
grouping sets允许针对同一个数据集进行不同维度的统计,其原理类似于将不同的group by的结果通过union all 拼接在一起,下表即是使用grouping sets以及其对应的group by 等价写法
|
GROUPING SETS |
GROUP BY等价写法 |
---|---|---|
1 | SELECT a, b, SUM(c) FROM tab1 GROUP BY a, b GROUPING SETS ( (a,b) ) |
SELECT a, b, SUM(c) FROM tab1 GROUP BY a, b |
2 | SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b GROUPING SETS ( (a,b), a) |
SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b
SELECT a, null, SUM( c ) FROM tab1 GROUP BY a |
3 | SELECT a,b, SUM |