Equivalenti GROUPING SETS

Una clausola GROUP BY che utilizza GROUPING SETS può generare un set di risultati equivalente al set generato da un'operazione UNION ALL di più clausole GROUP BY semplici. I GROUPING SETS possono generare un risultato equivalente a quello generato da una semplice operazione GROUP BY, ROLLUP o CUBE. Combinazioni diverse di GROUPING SETS, ROLLUP o CUBE possono generare set di risultati equivalenti.

In questo argomento vengono forniti esempi degli equivalenti GROUPING SETS. Le abbreviazioni seguenti sono utilizzate negli esempi:

  • Agg(): qualsiasi funzione di aggregazione

  • (arg): un argomento

Equivalente GROUPING SETS di UNION ALL

Specificare GROUPING SETS (<set di raggruppamenti> [,...n ]) come elenco GROUP BY equivale a un'operazione UNION ALL di query, ciascuna con uno dei set di raggruppamenti indicato come il proprio elenco GROUP BY. Le funzioni di aggregazione su numeri a virgola mobile possono restituire risultati leggermente differenti.

Le due istruzioni seguenti sono equivalenti:

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

Equivalenti GROUPING SETS di un'operazione GROUP BY semplice

Nelle clausole seguenti vengono restituiti gli stessi totali complessivi:

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

Nelle clausole seguenti vengono restituiti gli stessi singoli set:

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

Equivalenti GROUPING SETS ROLLUP

GROUP BY ROLLUP (<elenco di elementi composti>) con dimensioni n nell'elenco di input equivale a GROUPING SETS, con tutti i prefissi (n+1) dell'elenco degli input come GROUPING SETS.

Le due clausole seguenti sono equivalenti:

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

Equivalenti GROUPING SETS CUBE

GROUP BY CUBE (<elenco di elementi composti>) con dimensioni n nell'elenco di input equivale a GROUPING SETS, con il set completo (2 combinazioni n delle dimensioni nell'elenco degli input) dell'elenco degli input come GROUPING SETS.

Le due clausole seguenti sono equivalenti:

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.

Le due clausole seguenti sono equivalenti:

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

Colonne composite in ROLLUP che includono un set di raggruppamenti in un ROLLUP

Le due clausole seguenti sono equivalenti:

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

Colonne composite in CUBE che includono un set di raggruppamenti in un CUBE

Le due clausole seguenti sono equivalenti:

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

GROUP BY che contiene GROUPING SETS, ROLLUP o CUBE

Le due clausole seguenti sono equivalenti:

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

Le due clausole seguenti sono equivalenti:

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

Le due clausole seguenti sono equivalenti:

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 incluso in un elenco GROUPING SETS

Le due clausole seguenti sono equivalenti:

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

ROLLUP incluso in un set di raggruppamenti

Le due clausole seguenti sono equivalenti:

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