看到一篇grouping sets
的文章,写的比较清晰,搬了过来,原文链接https://www.cnblogs.com/kimbo/p/8445434.html
函数说明:
-
grouping sets
在一个group by
查询中,根据不同的维度组合进行聚合,等价于将不同维度的group by
结果集进行union all
-
cube
根据group by
的维度的所有组合进行聚合 -
rollup
是cube
的子集,以最左侧的维度为主,从该维度进行层级聚合。
-- grouping sets
select
order_id,
departure_date,
count(*) as cnt
from ord_test
where order_id=410341346
group by order_id,
departure_date
grouping sets (order_id,(order_id,departure_date))
;
---- 等价于以下
group by order_id
union all
group by order_id,departure_date
-- cube
select
order_id,
departure_date,
count(*) as cnt
from ord_test
where order_id=410341346
group by order_id,
departure_date
with cube
;
---- 等价于以下
select count(*) as cnt from ord_test where order_id=410341346
union all
group by order_id
union all
group by departure_date
union all
group by order_id,departure_date
-- rollup
select
order_id,
departure_date,
count(*) as cnt
from ord_test
where order_id=410341346
group by order_id,
departure_date
with rollup
;
---- 等价于以下
select count(*) as cnt from ord_test where order_id=410341346
union all
group by order_id
union all
group by order_id,departure_date
结果:grouping_sets, cube, rollup
网友评论