?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

齊發國際官網網站:Oracle中用GROUPING SETS分組自定義匯總

?

本文經由過程文章作者的切身經歷來解說若何在Oracle數據庫中應用GROUPING SETS分組自定義。

當你與COUNT和SUM這類總計函數一路應用GROUP BY語句時,你一樣平常得不到多級總數。GROUP BY中每個獨一的列組合天生一個總數,但這些總數不會“累加”到更高一級的總數中。齊發國際官網網站

要實現這一點,你可以用GROUP BY ROLLUP或GROUP BY CUBE替代GROUP BY,不過它們會天生所有可能的總數,而你可能不必要整個總數。對GROUP BY CUBE而言,將會天生2^n組總數,這里的n是GROUP BY中列的數目。

查看下面的查詢,它應用了SH樣本模式:

SELECT prod_id, cust_id, channel_id, SUM(quantity_sold)

FROM sales

WHERE cust_id

這將天生8齊發國際官網網站組總數:

所有行的總和

每個通道,包括所有產品和顧客。

每個顧客,包括所有產品和通道。

每項產品,包括所有顧客和通道。

每個通道/顧客組合,包括所有產品。

每個通道/產品組合,包括所有顧客。

每個產品/顧客組合,包括所有通道。

每個產品、顧客和通道組合。

可能的組合齊發國際官網網站異常多。GROUP BY CUBE中每增添一列,天生的總數就會翻一番。

可以用GROUP BY GROUPING SETS來代替GROUP BY CUBE。你可以利用來指定你感興趣的總數組合。由于它不必謀略它不必要聚攏(也不會孕育發生太多結果),以是對SQL引擎來說更為高效。

其款式為:

GROUP BY GROUPING SETS ((list), (list) ... )

這里(list)是圓括號中的一個列序列,這個組合天生一個總數。要增添一個總和,必須增添一個(NUlL)分組集。

例如,假如只要天生每項產品(包括所有顧客和通道)和每個顧客/通道組合(包括所有產品)的總數,可以輸入:

SELECT prod_id, cust_id, chann齊發國際官網網站el_id, SUM(quantity_sold)

FROM sales

WHERE cust_id

這種措施將這個數據集天生的總數數量從180個削減到37個,并贊助你著重回答你盼望解答的問題齊發國際官網網站。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户