GROUPING SETS-Entsprechungen

Eine GROUP BY-Klausel, die GROUPING SETS verwendet, kann ein Resultset generieren, das einem von UNION ALL mit mehreren einfachen GROUP BY-Klauseln generierten Resultset entspricht. GROUPING SETS kann ein Ergebnis generieren, das dem von einem einfachen GROUP BY-, ROLLUP- oder CUBE-Vorgang generierten Ergebnis entspricht. Andere Kombinationen von GROUPING SETS, ROLLUP oder CUBE können entsprechende Resultsets generieren.

In diesem Thema werden Beispiele für GROUPING SETS-Entsprechungen bereitgestellt. In den Beispielen werden die folgenden Abkürzungen verwendet:

  • Agg(): Beliebige Aggregatfunktion

  • (arg): Ein Argument

GROUPING SETS-Entsprechung von UNION ALL

Das Angeben von GROUPING SETS,<Gruppierungssatz> [,...n ]) als GROUP BY-Liste entspricht UNION ALL mit Abfragen, wobei jeweils einer der Gruppierungssätze die GROUP BY-Liste ist. Aggregate für Gleitkommazahlen geben möglicherweise etwas andere Ergebnisse zurück.

Die folgenden Anweisungen sind gleichwertig:

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-Entsprechungen eines einfachen GROUP BY

Die folgenden Klauseln geben die gleichen Gesamtbeträge zurück:

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

Die folgenden Klauseln geben die gleichen einzelnen Sätze zurück:

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

GROUPING SETS ROLLUP-Entsprechungen

GROUP BY ROLLUP (<Liste zusammengesetzter Elemente>) mit n Dimensionen in der Eingabeliste ist äquivalent zu GROUPING SETS mit allen Präfixen (n+1) der Eingabeliste als GROUPING SETS.

Die folgenden Klauseln sind gleichwertig:

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-Entsprechungen

GROUP BY CUBE (<Liste zusammengesetzter Elemente>) mit n Dimensionen in der Eingabeliste ist äquivalent zu GROUPING SETS mit dem vollständigen Satz (2n Kombinationen der Dimensionen in der Eingabeliste) der Eingabeliste als GROUPING SETS.

Die folgenden Klauseln sind gleichwertig:

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.

Die folgenden Klauseln sind gleichwertig:

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

Zusammengesetzte Spalten in ROLLUP einschließlich eines Gruppierungssatzes in einem ROLLUP

Die folgenden Klauseln sind gleichwertig:

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

Zusammengesetzte Spalten in CUBE einschließlich eines Gruppierungssatzes in CUBE

Die folgenden Klauseln sind gleichwertig:

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

GROUP BY mit GROUPING SETS, ROLLUP oder CUBE

Die folgenden Klauseln sind gleichwertig:

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

Die folgenden Klauseln sind gleichwertig:

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

Die folgenden Klauseln sind gleichwertig:

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) )

ROLLUP in einer GROUPING SETS-Liste

Die folgenden Klauseln sind gleichwertig:

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

ROLLUP in einem Gruppierungssatz

Die folgenden Klauseln sind gleichwertig:

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