**SELECT [col1,col2] 彙總函數(col),[GROUPING(col),]
[GROUPING_ID(col1,col2,...)]
FROM 資料表
WHERE 條件表達式
[GROUP BY{ROLLUP | CUBE |GROUPING SET}(col1,col2)]
[HAVING 條件表達式]
[ORDER BY col1]; **
- ROLLUP:完成捲起式分項小計暨分項總和
- CUBE:完成遍歷式分項小計暨分項總和
- GROUPING:判斷分項小計查詢產生的資料列是資料表中原有的資料還是統計產生,要和ROLLUP或是CUBE一起使用
- GROUPING_ID函數:目的跟ROUPING一樣,但他可以接受一個以上的分組欄位,且返回值是依據函數內分組欄位的組合對應位置的二進制判斷
- GROUPING_SETS函數:目的在組合分項加總的欄位
- 分項小計與總計的關鍵語句不會同時出現
- ROLLUP,「小計暨彙總」的意含,ROLLUP是GROUP BY子句的擴展,可以將函數n欄位由右到左,從全體依序捲起後再將剩下欄位當為分組依據,產生n+1分項小計
ex:ROLLUP (a,b,c) 會產生3+1組 (a,b,c) (b,c) (c) (NULL),(NULL)為小計之總和
- CUBE,對函數內的欄位進行遍歷組合匯總的意涵,他也是GROUP BY 子句的一種擴展,可以計算每一分項小計和該分項總和,同時在各分項末尾再加上個小計所有分項總計
ex:CUBE(a,b,c)會產生(a,b,c)、(a,b)、(a)、(a,c)、(b,c)、(b)、(c)、和(null)
- GROUPING SETS,目的在於在組合要分項加總的欄位,像是在一個使用3個以上欄位分組的查詢中,只想得到某一些欄位的組合的分項小計
- GROUPING,需要和ROLLUP跟CUBE查詢語句一起使用,目的在判斷分項小計查詢產生的資料列是資料表中原有資料,還是由統計所產生的,如果GROUPING(欄位)是空值的,則GROUPING返回1,代表資料是統計出來的,否則返回0,表示資料是資料表原有的
- GROUPING_ID,目的和GROUPING相同,必須使用ROLLUP跟CUBE查詢語句一起使用,都是判斷分項小計查詢產生的資料列是資料表中原有資料,還是由統計所產生的,不同地方是,他可以接受一組以上的分組欄位,返回值是依函數內分組欄位的組合對應位置之二進為值判斷