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);sql


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爲非空 等效於spa

 

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 item3d

 

輸出結果以下:code

使用cube時,是對group by cube(item, color) 中的item,color字段都進行小計計算(各列進行分析,各維度的統計),並計算出合計server

當使用rollup時,只對group by rollup(item, color) 中的item字段都進行小計計算,並計算出合計blog

select item, color ,sum(qty) from FIXED_PRODUCTION group by  ( item,color)  order by item;qt

只是基於item、color字段基礎上的sum,沒有小計、合計擴展功能。it

 

 對於sql server中支持的compute    (by),是返回多個結果集。table

相關文章
相關標籤/搜索