-- 多维分析时可以标示结果属于哪一个分组集合
-- gid 为 0 的,维度为全表(NULL、NULL)
-- gid 为 1 的,维度为 a
-- gid 为 2 的,维度为 b
-- gid 为 3 的,维度为(a、b)
select
key, value, GROUPING__ID as gid, count(*) as cnt
from
(select 'key01' as key,'value01' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key02' as key,'value02' as value) t
GROUP BY key, value WITH ROLLUP;
-- 多维分析时可以标示结果属于哪一个分组集合
-- gid 为 0 的,维度为全表(NULL、NULL)
-- gid 为 1 的,维度为 a
-- gid 为 2 的,维度为 b
-- gid 为 3 的,维度为(a、b)
select
key, value, GROUPING__ID as gid, count(*) as cnt
from
(select 'key01' as key,'value01' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key02' as key,'value02' as value) t
GROUP BY key, value grouping sets (key,value,(key,value),());
-- 多维分析时可以标示结果属于哪一个分组集合
-- gid 为 0 的,维度为全表(NULL、NULL)
-- gid 为 1 的,维度为 a
-- gid 为 2 的,维度为 b
-- gid 为 3 的,维度为(a、b)
select
key, value, GROUPING__ID as gid, count(*) as cnt
from
(select 'key01' as key,'value01' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key03' as key,'value03' as value
union all
select 'key02' as key,'value02' as value
union all
select 'key02' as key,'value02' as value) t
GROUP BY key, value WITH CUBE ORDER BY gid;
从以上3个语句可以看出,rollup是cube的子集,以最左侧的维度为主,从该维度进行层级聚合。grouping sets是对全维度分析cube结果的提取