grouping sets和rollup、cube的用法

grouping sets和rollup、cube都可以对不同维度的数据进行汇总,主要区别就是不同用法的灵活性不一样。

1、grouping sets

grouping sets可以根据自己的需要,灵活调整维度的组合,可以根据实际需要调整维度组合。

语法:

select A,B,sum(total) total

from table

group by

grouping sets(

(),  ----不保留维度,所有数据汇总

(A,B),  ----相当于group by A,B

(A),  ----相当于group by A

(B)  ---相当于 group by B

)

例如:

假设有张数据表sales_info,里面存了region,product和sales三个字段

regionproductsales
SOUTHA100
SOUTHB200
SOUTHC300
NORTHA200
NORTHB350
WESTA350
WESTC450

如果要对不同维度的数据进行汇总,grouping sets的执行如下:

select region,product,sum(sales) total_sales
from sales_info 
group by 
grouping sets
(
    (),
    (region),
    (product),
    (region,product),
);

结果为:

1)没有任何维度,总的结果

2)region作为维度分组的结果

3)product作为维度分组的结果

4)region,product作为维度分组的结果

regionproducttotal_sales
nullnull1950
NORTHnull550
SOUTHnull600
WESTnull800
nullA650
nullB550
nullC750
NORTHA200
NORTHB350
SOUTHA100
SOUTHB200
SOUTHC300
WESTA350
WESTC450

等同于

select null region,null product,sum(sales) total_sales
from sales_info 
union all
select region,null product,sum(sales) total_sales
from sales_info 
group by region
union all
select null region,product,sum(sales) total_sales
from sales_info 
group by product
union all
select region,product,sum(sales) total_sales
from sales_info 
group by region,product

2、rollup

rollup生成分层汇总,从最详细的级别到总计

语法:

(1)

select A,B,sum(total) total

from table

group by

a)rollup (A,B)  ---有三层group by, 一是group by A,B;二是group by A;三是不保留维度,直接汇总

b)rollup (B,A)   ---有三层group by, 一是group by B,A;二是group by B;三是不保留维度,直接汇总

(2)

select A,sum(total) total

from table

group by

rollup (A)    ---有两层group by, 一是group by A;二是不保留维度,直接汇总

(3)

select B,sum(total) total

from table

group by

rollup (B)   ---有两层group by, 一是group by B;二是不保留维度,直接汇总


例如:

select region,product,sum(sales) total_sales
from sales_info
group by 
rollup (region,product)

结果为:

要实现region和product的维度计算,用rollup只能得到

1)region,product作为维度分组的结果

2)region作为维度分组的结果

3)没有任何维度,总的结果

regionproducttotal_sales
NORTHA200
NORTHB350
SOUTHA100
SOUTHB200
SOUTHC300
WESTA350
WESTC450
NORTHnull550
SOUTHnull600
WESTnull800
nullnull1950

等同于

select region,product,sum(sales) total_sales
from sales_info 
group by region,product
union all
select region,null product,sum(sales) total_sales
from sales_info 
group by region
union all
select null region,null product,sum(sales) total_sales
from sales_info 

3、cube

cube生成所有可能的分组组合的汇总,包含所有维度的组合

语法:

select A,B,sum(total) total

from table

group by

cube (A,B)   ---穷尽所有组合:group by A,B;group by A;group by B;不保留维度,直接汇总

例如:

select region,product,sum(sales) total_sales
from sales_info
group by 
cube (region,product)

结果为:

用cube来实现分组,得到的结果是

1)没有维度,总的结果

2)region作为维度分组的结果

3)product作为维度分组的结果

4)region,product作为维度分组的结果

regionproducttotal_sales
nullnull1950
NORTHnull550
SOUTHnull600
WESTnull800
nullA650
nullB550
nullC750
NORTHA200
NORTHB350
SOUTHA100
SOUTHB200
SOUTHC300
WESTA350
WESTC450

cube穷尽了所有维度的组合,在这里等同于grouping sets把所有组合列举出来。如果需要穷尽所有维度的组合,用cube就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值