GROUPING SETS 對等項目

使用 GROUPING SETS 的 GROUP BY 子句所產生的結果集,對等於由多重簡單 GROUP BY 子句的 UNION ALL 所產生的結果集。GROUPING SETS 可產生與簡單 GROUP BY、ROLLUP 或 CUBE 作業對等的結果。GROUPING SETS、ROLLUP,或 CUBE 的不同組合,都可以產生對等的結果集。

本主題提供 GROUPING SETS 對等項目的範例。下列縮寫用於範例:

  • Agg():任何彙總函數

  • (arg):引數

GROUPING SETS 的 UNION ALL 對等項目

指定 GROUPING SETS (<grouping set> [,...n]) 當 GROUP BY 清單對等於查詢的 UNION ALL (根據其 GROUP BY 來設定清單群組的其中之一)。使用浮點數的彙總可能會傳回些許不同的結果。

下列陳述式是對等的:

SELECT customer, year, SUM(sales)
FROM T
GROUP BY GROUPING SETS ((customer), (year))
SELECT customer, NULL as year, SUM(sales)
FROM T 
GROUP BY customer
UNION ALL
SELECT NULL as customer, year, SUM(sales)
FROM T 
GROUP BY year

GROUPING SETS 的簡單 GROUP BY 對等項目

下列子句傳回相同的總計:

GROUP BY GROUPING SETS ( () )
GROUP BY ()

下列子句傳回相同的單一集合:

GROUP BY GROUPING SETS ( (C1, C2, ..., Cn) )
GROUP BY C1, C2, ..., Cn

GROUPING SETS ROLLUP 對等項目

在輸入清單中具有 n 維度的 GROUP BY ROLLUP (<composite element list>) 與 GROUPING SETS 相等,其輸入列的所有前置詞 (n+1) 與 GROUPING SETS 相等。

下列子句是對等的:

GROUP BY ROLLUP (C1, C2, …, Cn-1, Cn)
GROUP BY GROUPING SETS ( (C1, C2, …, Cn-1, Cn)
    ,(C1, C2, ..., Cn-1)
    ...
    ,(C1, C2)
    ,(C1)
    ,() )

GROUPING SETS CUBE 對等項目

在輸入清單中具有 n 維度的 GROUP BY CUBE (<composite element list>) 與在其輸入清單中具有完整集合 (亦即,在其輸入清單中有 2 組 n 組合) 的 GROUPING SETS 相等。

下列子句是對等的:

GROUP BY CUBE (C1, C2, C3, ..., Cn-2, Cn-1, Cn)
GROUP BY GROUPING SETS (
     (C1, C2, C3, ..., Cn-2, Cn-1, Cn) -- All dimensions are included.
    ,( , C2, C3, ..., Cn-2, Cn-1, Cn) -- n-1 dimensions are included.
    ,(C1, C3, ..., Cn-2, Cn-1, Cn)
    …
    ,(C1, C2, C3, ..., Cn-2, Cn-1,)
    ,(C3, ..., Cn-2, Cn-1, Cn) -- n-2 dimensions included
    ,(C1  ..., Cn-2, Cn-1, Cn)
    …
    ,(C1, C2) -- 2 dimensions are included.
    ,…
    ,(C1, Cn)
    ,…
    ,(Cn-1, Cn)
    ,…
    ,(C1) -- 1 dimension included
    ,(C2)
    ,…
    ,(Cn-1)
    ,(Cn)
    ,() ) -- Grand total, 0 dimension is included.

下列子句是對等的:

GROUP BY CUBE (C1, C2, C3)
GROUP BY GROUPING SETS ( (C1, C2, C3)
    ,(C1, C2)
    ,(C1, C3)
    ,(C2, C3)
    ,(C1)
    ,(C2)
    ,(C3)
    ,() )

ROLLUP 的複合資料行包含 ROLLUP 內的群組集

下列子句是對等的:

ROLLUP(A, (C1, C2, ..., Cn) )
ROLLUP( (A), (C1, C2, ..., Cn) )
GROUPING SETS ( (A, C1, C2, ..., Cn), (A), () )

CUBE 的複合資料行包含 CUBE 內的群組集

下列子句是對等的:

CUBE(A, (C1, C2, ..., Cn) )
CUBE( (A), (C1, C2, ..., Cn) )
GROUPING SETS ( (), (A), (C1, C2, ..., Cn), (A, C1, C2, ..., Cn) )

包含 GROUPING SETS、ROLLUP,或 CUBE 的 GROUP BY

下列子句是對等的:

GROUP BY A, CUBE (B, C)
GROUP BY GROUPING SETS ( (A), (A, B), (A, C), (A, B, C ))

下列子句是對等的:

GROUP BY A, GROUPING SETS ( (B), (C) )
GROUP BY GROUPING SETS ( (A, B), (A, C) )

下列子句是對等的:

GROUP BY ROLLUP (A, B), ROLLUP(C, D)
GROUP BY GROUPING SETS
    ( (),(C),(C,D),(A),(A,C),(A,C,D),(A,B),(A,B,C),(A,B,C,D) )

在 GROUPING SETS 清單中包含 ROLLUP

下列子句是對等的:

GROUP BY GROUPING SETS ( (A), ROLLUP (B, C) )
GROUP BY GROUPING SETS ( (A), (B,C), (B), () )

在群組集內包含 ROLLUP

下列子句是對等的:

GROUP BY GROUPING SETS(A, (B, ROLLUP(C, D)) )
GROUP BY GROUPING SETS (A, B, (B,C), (B, C, D) () )