sql中 with rollup 、with cube、grouping 統計函數用法

sql中 with rollup 、with cube、grouping 統計函數用法 html

SQL codejava

with rollup 、with cube、groupingsql

CUBE 和 ROLLUP 之間的區別在於:函數

CUBE 生成的結果集顯示了所選列中值的全部組合的聚合。.net

ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。code

grouping:htm

當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值爲1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值爲0。blog

--例如get

DECLARE @T TABLE(名稱 VARCHAR(1) , 出版商 VARCHAR(10),  價格1  INT, 價格2 INT)it

INSERT @T

SELECT 'a',  '北京',  1122 UNION ALL

SELECT 'a',  '四川',  2233 UNION ALL

SELECT 'b',  '四川',  1223 UNION ALL

SELECT 'b',  '北京',  1020 UNION ALL

SELECT 'b',  '昆明',  2030

SELECT

名稱,

出版商,

SUM(價格1) AS 價格1,

SUM(價格2) AS 價格2,

GROUPING(名稱) AS CHECK名稱,

GROUPING(出版商) AS CHECK出版商

FROM @T GROUP BY 名稱,出版商 WITH CUBE

/*

名稱   出版商        價格1         價格2         CHECK名稱 CHECK出版商

---- ---------- ----------- ----------- ------- --------

a    北京         11          22          0       0

a    四川         22          33          0       0

a    NULL       33          55          0       1

b    北京         10          20          0       0

b    昆明         20          30          0       0

b    四川         12          23          0       0

b    NULL       42          73          0       1

NULL NULL       75          128         1       1

NULL 北京         21          42          1       0

NULL 昆明         20          30          1       0

NULL 四川         34          56          1       0

(所影響的行數爲 11 行)

*/

--分析

/*group by 兩列:名稱有兩個類別A,B;全部由CUBE運算而生成行的是

名稱   出版商        價格1         價格2         CHECK名稱 CHECK出版商

---- ---------- ----------- ----------- ------- --------

a    NULL       33          55          0       1

b    NULL       42          73          0       1

出版商有三個類別,全部由CUBE運算而生成行的是

名稱   出版商        價格1         價格2         CHECK名稱 CHECK出版商

---- ---------- ----------- ----------- ------- --------

NULL 北京         21          42          1       0

NULL 昆明         20          30          1       0

NULL 四川         34          56          1       0

以及

NULL NULL       75          128         1       1

*/

SELECT

名稱,

出版商,

SUM(價格1) AS 價格1,

SUM(價格2) AS 價格2

FROM @T GROUP BY 名稱,出版商 WITH ROLLUP

/*

名稱   出版商        價格1         價格2

---- ---------- ----------- -----------

a    北京         11          22

a    四川         22          33

a    NULL       33          55

b    北京         10          20

b    昆明         20          30

b    四川         12          23

b    NULL       42          73

NULL NULL       75          128

*/

相關文章
相關標籤/搜索