group by (rollup/cute) grouping 解说,compute by
用 ROLLUP 汇总数据在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。 CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。create table FIXED_PRODUCTION(
item varchar2(64) not null,
color varchar2(64),
qty number(5)
);
insert into FIXED_PRODUCTION values('Table','Blue', 100);
insert into FIXED_PRODUCTION values('Table','Blue', 200);
insert into FIXED_PRODUCTION values('Table','Red ', 100);
insert into FIXED_PRODUCTION values('Chair','Blue', 100);
insert into FIXED_PRODUCTION values('Chair','Red', 200);
insert into FIXED_PRODUCTION values('Chair','Red',201);
select case
when item is null and color is null then
'合计'
when item is null then
'小计'
else
item
end item,
case
when color is null and item is not null then
'小计'
else
color
end color,
合计
from (select item, color, sum(qty) 合计
from FIXED_PRODUCTION
group by cube(item, color)
order by item);
grouping 需要和group by rollup/cube联合使用,用于判断是否是分组统计后的空(null)项,1为空,0为非空 等效于
select case when grouping(item)=1 and grouping(color)=1 then '合计' when grouping(item)=1 then '小计' else item end item,
case when grouping(color)=1 and grouping(item)=0 then '小计' else color end color,--grouping(color)=1等效于color is null
sum(qty) 合计
from FIXED_PRODUCTION
group by rollup(item, color)
order by item
输出结果如下:

使用cube时,是对group by cube(item, color) 中的item,color字段都进行小计计算(各列进行分析,各维度的统计),并计算出合计;
当使用rollup时,只对group by rollup(item, color) 中的item字段都进行小计计算,并计算出合计。

select item, color ,sum(qty) from FIXED_PRODUCTION group by ( item,color) order by item;
只是基于item、color字段基础上的sum,没有小计、合计扩展功能。

对于sql server中支持的compute (by),是返回多个结果集。



浙公网安备 33010602011771号