--创建测试表 use test create table test(id int,sort char(10),color char(10),num int constraint pk_test primary key(id,sort,color)) --插入数据 insert into test select 1,'book','blue',10 union all select 1,'book','green',10 union all select 1,'book','red',10 union all select 1,'car','blue',10 union all select 1,'car','red',10 union all select 2,'car','red',10 --group by select sort,color,sum(num) as num from test group by sort,color --输出结果 --book blue 10 --car blue 10 --book green 10 --book red 10 --car red 20 --group by with rollup select case when grouping(sort)=1 then 'all' else isnull(sort,'unknow') end as sort, case when grouping(color)=1 then 'all' else isnull(color,'unknow') end as color, sum(num) as num from test group by sort,color with rollup --输出结果 --book blue 10 --book green 10 --book red 10 --book all 30 --car blue 10 --car red 20 --car all 30 --all all 60 --group by with cube select case when grouping(sort)=1 then 'all' else isnull(sort,'unknow') end as sort, case when grouping(color)=1 then 'all' else isnull(color,'unknow') end as color, sum(num) as num from test group by sort,color with cube --输出结果 --book blue 10 --book green 10 --book red 10 --book all 30 --car blue 10 --car red 20 --car all 30 --all all 60 --all blue 20 --all green 10 --all red 30 总结: 1、CUBE 和 ROLLUP区别: ? CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ? ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 2、GROUPING是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。 仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
【转帖】with rollup和with cube的区别
最新推荐文章于 2022-12-12 18:39:51 发布