[SQL]詳解CUBE和ROLLUP區別<使用rollup或cube通過交叉列可產生高級匯總結果集>


要使用CUBE,首先要了解GROUP BY。
其實CUBE和ROLLUP區別不太大,只是在基於GROUP BY 子句創建和匯總分組的可能的組合上有一定差別,CUBE將返回的更多的可能組合。如果在GROUP BY子句中有N個列或者是有N個表達式的話,SQLSERVER在結果集上會返回2的N-1次冪個可能組合。

CUBE和ROLLUP之間的區別在於:     
    
CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。  

ROLLUP生成的結果集顯示了所選列中值的某一層次結構的聚合
    
ROLLUP就是將GROUP BY后面的第一列名稱求總和,而其他列並不要求
而CUBE則會將每一個列名稱都求總和  

COPY了一個例子,首先用ROLLUP

查詢語句:

Select cust_id,product_code,sum(qty) as quantity

From invoices Where cust_id IN (4,5)

Group By cust_id, product_code

WITH Rollup Order By cust_id

查詢結果:
cust_id         product_code         quantity
-------        --------------         -------
NULL            NULL                      10
4                 5                        3
4                 6                        3
4                 NULL                     6
5                 5                        4
5                 NULL                     4
第一行是4,5買的所有產品的數量(
第二行是4買5產品的數量
第三行是4買6產品的數量
第四行是4買所有產品的數量(按照cust_id=4總匯)
第五行是5買5產品的數量
第六行是5買所有產品的數量(按照cust_id=5總匯)

如果查詢語句中的ROLLUP關鍵字更改為CUBE,就會多出有關產品的信息
查詢結果:
cust_id         product_code         quantity
-------        --------------         -------
NULL            NULL                       10
NULL            5                           7
NULL            6                           3
4               5                           3
4               6                           3
4               NULL                        6
5               5                           4
5               NULL                        4
第2行是所有顧客買5產品的數量(product_code=5 總匯)
第3行是所有顧客買6產品的數量(product_code=6 總匯)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM