以上三種在數據彙總統計時經常用到,我嘗試以簡明易懂地總結出其使用方法和意義
GROUP BY ROLLUP(c1,c2,c3...cN) 分級彙總
1. 彙總從左到右逐級降低,最精細的彙總數據是根據最右的列得到
2. 根據c1得到全部彙總->再根據c2細分彙總->...->根據cN得到最精細彙總。
採購進貨表Purchase(貨品ID,數量,價格,類型,日期,供應商 )
SELECT MONTH(日期),類型,供應商 ,SUM( 價格)
FROM Purchase
GROUP BY ROLLUP(MONTH(日期),類型,供應商)
彙總的條件包括4種:
(所有),(MONTH(日期)),(MONTH(日期),類型),(MONTH(日期),類型,供應商)
條件對應的結果集:
得到總採購額彙總,根據日期得到每月採購額彙總,各個月中不同類型商品的採購額的單項彙總,每月中每個類型的商品分別由不同供應商的供貨額。
GROUP BY CUBE(c1,c2,c3...Cn) 獲取所有聚合值的超集,換句話說,就是生成的結果集包括所有可能的聚合情況(所有維度)
SELECT MONTH(日期),類型,供應商 ,SUM( 價格)
FROM Purchase
GROUP BY CUBE(MONTH(日期),類型,供應商)
彙總條件包括7種:
(所有),(MONTH(日期)),(類型),(供應商),(MONTH(日期),類型),
(MONTH(日期),供應商),(類型,供應商)
條件對應結果集包括:
採購總額的彙總,各個月份的採購額彙總,各類型商品的採購額彙總,不同供應商的採購總額,每個月不同類型商品的採購額,每個月不同供應商的採購額,每個類型商品不同供應商的採購額。
GROUP BY GROUPING SETS(c1,c2,c3...cN)指定不同的彙總列,合併結果到一個結果集。類似多個彙總結果用UNION ALL拼起來。
SELECT MONTH(日期),類型,供應商 ,SUM( 價格)
FROM Purchase
GROUP BY GROUPING SETS(MONTH(日期),類型,供應商)
()條件表示,所有彙總。還可以將多個列組合成一個分組條件,如((c1,c2),c3)
彙總條件:
(MONTH(日期)),(類型),(供應商),分別得到結果,然後合併到一個返回結果集中。
意義:
一個結果集輸出,多個分組彙總的合併結果集。各月採購額+各類型商品採購額+各供應商採購額。