CUBE和ROLLUP函式的用法及區別

2021-08-11 11:11:57 字數 3772 閱讀 8067

sql 中rollup 用法

rollup 運算子生成的結果集類似於 cube 運算子生成的結果集。

下面是 cube 和 rollup 之間的具體區別:

下面對比一下group by 、cube 和  rollup後的結果

建立表:

create table depart 

(部門 char(10),員工 char(6),工資 int)

insert into depart select 'a','zhang',100 

insert into depart select 'a','li',200 

insert into depart select 'a','wang',300 

insert into depart select 'a','zhao',400 

insert into depart select 'a','duan',500 

insert into depart select 'b','duan',600 

insert into depart select 'b','duan',700

部門         員工         工資

a             zhang     100 

a             li             200 

a             wang      300 

a             zhao      400 

a             duan      500 

b             duan      600 

b             duan      700

(1)group by

select 部門,員工,sum(工資)as total 

from depart 

group by 部門,員工

結果:a             duan      500 

b             duan      1300 

a             li        200 

a             wang      300 

a             zhang     100 

a             zhao      400

(2)rollup

select 部門,員工,sum(工資)as total 

from depart 

group by  部門,員工  with rollup

結果如下:

a             duan       500 

a             li             200 

a             wang      300 

a             zhang     100 

a             zhao       400 

a             null        1500 

b             duan       1300 

b             null       1300 

null       null        2800

rollup結果集中多了三條彙總資訊:即部門a的合計,部門b的合計以及總合計。其中將部門b中的duan合計。

等價於下列sql語句

select 部門,員工,sum(工資)as total 

from depart 

group by 部門,員工 

union 

select 部門,'null',sum(工資)as total 

from depart 

group by  部門 

union 

select 'null','null',sum(工資)as total 

from depart

結果:a             duan      500 

a             li           200 

a             null      1500 

a             wang      300 

a             zhang     100 

a             zhao       400 

b             duan      1300 

b             null       1300 

null       null        2800

(3)cube

select 部門,員工,sum(工資)as total 

from depart 

group by 部門,員工 with cube

結果:a             duan      500 

a             li           200 

a             wang      300 

a             zhang     100 

a             zhao      400 

a             null      1500 

b             duan      1300 

b             null      1300 

null    null         2800 

null    duan        1800 

null    li               200 

null    wang       300 

null    zhang       100 

null    zhao         400

cube的結果集是在 rollup結果集的基礎上多了5行,這5行相當於在rollup結果集上在union 上以員工 (即cube)為 group by的結果。

select 部門,員工,sum(工資)as total 

from depart 

group by 部門,員工 with cube

等價於下列的sql語句:

select 部門,員工,sum(工資)as total 

from depart 

group by  部門,員工  with rollup

union

select 'null',員工,sum(工資)as total 

from depart 

group by 員工

結果:null    null    2800 

a             null    1500 

a             duan      500 

a             li        200 

a             wang      300 

a             zhang     100 

a             zhao      400 

b             null    1300 

b             duan      1300 

null    duan      1800 

null    li             200 

null    wang      300 

null    zhang     100 

null    zhao      400

這樣一對比結果就全明白了。

關於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對資料進行彙總

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