使用CUBE和ROLLUP對資料進行彙總

2021-09-24 17:25:43 字數 2783 閱讀 4500

【it專家網獨家】想要找乙個既快捷又有效的方法來對您儲存在資料庫裡的資料進行彙總分析嗎?sql語言中的rollup和cube命令提供了乙個非常有用的工具,可以讓您快速深入地獲取資料的各種內在性質。rollup和cube是sql的擴充套件命令,可以在sql server 6.5(及以上版本)和oracle 8i(及以上版本)中使用。

表pets

type

store

number

山東

12

山東

18

天津

4

天津

14

內蒙古

9

內蒙古

5

內蒙古

1

作為這家寵物超市的老闆,我們希望能夠迅速了解關於存貨各個方面的情況。我們可以僱乙個sql程式設計師,編寫一些查詢命令好獲得我們需要的確切資料。還好,我們的資料集不是很大,所以我們可以興致勃勃地站在一旁檢視這些原始資料。使用cube命令就能夠切實滿足我們對資料的渴求。以下就是相應的sql例項:

select type, store, sum(number) as number

from pets

group by type,store

with cube

執行該查詢返回的結果如下:

type

store

number

山東

18

內蒙古

9

null

27

山東

12

內蒙古

5

天津

14

null

31

內蒙古

1

天津

4

null

5

null

null

63

null

山東

30

null

內蒙古

15

null

天津

18

一下子多出了這麼多的資料!請注意表**現了很多額外的分組包括null行,這些絕不會出現在標準的group by命令所返回的結果中。它們都是cube指令所新增的彙總項。分析上面的結果資料,你會發現我們的**鏈上還有27只貓、31只狗和5隻龜,由三個不同地區的商店提供。山東店庫存裡的寵物數量最多,包含了目錄裡的30只寵物。

我們對每個地區店的寵物總數並不是很感興趣,我們只是要乙個包含每種型別寵物的**及其總數的資料。使用rollup 操作符代替cube 操作符就能排除掉那些在第一列包含了null 的結果資料。

sql語法如下:

select type, store, sum(number) as number

from pets

group by type,store

with rollup

結果如下:

type

store

number

山東

18

內蒙古

9

null

27

山東

12

內蒙古

5

天津

14

null

31

內蒙古

1

天津

4

null

5

null

null

63

關於rollup和cube等高階函式

oracle提供了很多高階的統計函式,如rollup cube grouping grouping sets,同時在資料庫層還提供了維 立方等物件,可以通過定義維和立方實現查詢重寫,提高資料倉儲的 select 批次號,種類,單位型別,sum 金額 count 1 from資料表 where批次號 ...

db2的rollup和cube函式

rollup的效果就是對group by後面的乙個分組列名進行統計。bankid為第一列 select case when grouping branchid 0 then branchid else 小計 end as branchid,case when grouping bankid 0 th...

CUBE和ROLLUP函式的用法及區別

sql 中rollup 用法 rollup 運算子生成的結果集類似於 cube 運算子生成的結果集。下面是 cube 和 rollup 之間的具體區別 下面對比一下group by cube 和 rollup後的結果 建立表 create table depart 部門 char 10 員工 cha...