Oracle學習筆記:rollup、cube分組函式
阿新 • • 發佈:2020-10-22
一、rollup函式
1.介紹
rollup()
俗名捲起函式,是為 group by()
的擴充套件函式。
使用語法:group by rollup(a,b)
說明:針對 a
列、b
列分別進行分組,再針對 (a,b)
組合列進行分組,最後彙總。
分組的順序對結果有影響。
分組統計更加細化。
2.實操
單列分組
平時使用 group by
進行分組彙總的時候,有時還需要進行累計,還得手動再計算一次。
例如:
select corp_name, count(1) as cnt from table_name group by corp_name 汕頭 3389 河源 882 清遠 1852 揭陽 1485 深圳 4292 珠海 1953 東莞 16381 梅州 1883 中山 3075 肇慶 1894 雲浮 9124 廣州 9198 江門 2551 惠州 2103 茂名 1708 潮州 1720 韶關 2815 汕尾 1255 湛江 2540 佛山 2842 陽江 1401
這個時候還想知道全省的累計資料的話,仍需手工計算。
Oracle
提供一個 rollup()
函式可以多新增一行彙總資料。
select nvl(corp_name, '全省') as corp_name count(1) as cnt from table_name group by rollup(corp_name) 潮州 1720 東莞 16381 佛山 2842 廣州 9198 河源 882 惠州 2103 江門 2551 揭陽 1485 茂名 1708 梅州 1883 清遠 1852 汕頭 3389 汕尾 1255 韶關 2815 深圳 4292 陽江 1401 雲浮 9124 湛江 2540 肇慶 1894 中山 3075 珠海 1953 全省 74343 -- 結果多了一行彙總資料
多列分組
針對地市、渠道進行統計彙總,情況如下。
select corp_name,
channel,
count(1) as cnt
from table_name
group by corp_name,
channel
1 廣州 電子渠道 5951
2 汕頭 其他 935
3 汕尾 電子渠道 1224
4 清遠 自有實體 47
5 潮州 電子渠道 884
6 雲浮 電子渠道 2612
7 中山 政企直銷 178
8 深圳 其他 22
9 韶關 其他 58
10 陽江 其他 4
11 潮州 政企直銷 239
利用 rollup()
函式進行彙總。
select corp_name,
channel,
count(1) as cnt
from table_name
group by rollup(corp_name,
channel)
1 潮州 其他 53
2 潮州 電子渠道 884
3 潮州 社會實體 185
4 潮州 政企直銷 239
5 潮州 自有實體 359
6 潮州 1720
7 東莞 其他 4417
8 東莞 電子渠道 6266
9 東莞 社會實體 317
10 東莞 政企直銷 461
...
91 肇慶 1894
92 中山 其他 62
93 中山 電子渠道 2263
94 中山 政企直銷 178
95 中山 自有實體 572
96 中山 3075
97 珠海 其他 752
98 珠海 電子渠道 1201
99 珠海 1953
100 74343
二、cube函式
1.介紹
cube()
函式是維度更細的統計,語法類似於 rollup()
函式。
不同點在於 cube()
首先進行無欄位的聚合,再依次對每個欄位進行聚合。
2.實操
select corp_name,
channel,
count(1) as cnt
from table_name
group by cube(corp_name,
channel)
1 74343
2 其他 12428
3 電子渠道 45951
4 社會實體 2148
5 政企直銷 3794
6 自有實體 10022
7 潮州 1720
8 潮州 其他 53
9 潮州 電子渠道 884
10 潮州 社會實體 185
11 潮州 政企直銷 239
12 潮州 自有實體 359
13 東莞 16381
14 東莞 其他 4417
15 東莞 電子渠道 6266
16 東莞 社會實體 317
17 東莞 政企直銷 461
18 東莞 自有實體 4920
19 佛山 2842
20 佛山 其他 1114
三、對比
假設有 n 個維度,那麼 rollup()
函式會有 n 個聚合,cube()
函式會有 2n 個聚合。
- rollup 統計列
rollup(a,b) 統計列包含:(a,b)、(a)、()
rollup(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a)、()
....
- cube 統計列
cube(a,b) 統計列包含:(a,b)、(a)、(b)、()
cube(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
參考連結1:Oracle的rollup語句詳解
參考連結2:Oracle分組函式之ROLLUP用法
參考連結3:Oracle-rollup()函式