Equivalentes de GROUPING SETS

Una cláusula GROUP BY que utiliza GROUPING SETS puede generar un conjunto de resultados equivalente al generado por una cláusula UNION ALL o varias cláusulas GROUP BY simples. GROUPING SETS puede generar un resultado equivalente al generado por una simple operación GROUP BY, ROLLUP o CUBE. Diferentes combinaciones de GROUPING SETS, ROLLUP o CUBE pueden generar conjuntos de resultados equivalentes.

En este tema se proporcionan ejemplos de equivalencias a GROUPING SETS. En los ejemplos se utilizan las siguientes abreviaturas:

  • Agg(): cualquier función de agregado

  • (arg): un argumento

Equivalente GROUPING SETS a UNION ALL

Especificar GROUPING SETS (<conjunto de agrupamiento> [,...n ]) como lista GROUP BY es equivalente a una UNION ALL de las consultas, cada una con uno de los conjuntos de agrupamiento establecido como su lista GROUP BY. El uso de agregados con números en punto flotante podría dar lugar a resultados ligeramente diferentes.

Las siguientes instrucciones son equivalentes:

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

Equivalente GROUPING SETS de un GROUP BY simple

Las cláusulas siguientes devuelven los mismos totales generales:

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

Las cláusulas siguientes devuelven los mismos conjuntos únicos:

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

Equivalentes de GROUPING SETS ROLLUP

GROUP BY ROLLUP (<lista de elementos compuesta>) con n dimensiones en la lista de entrada es equivalente a GROUPING SETS, con todos los prefijos (n+1) de su lista de entrada como sus GROUPING SETS.

Las siguientes cláusulas son equivalentes:

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

Equivalentes de GROUPING SETS CUBE

GROUP BY CUBE (<lista de elementos compuesta>) con n dimensiones en la lista de entrada es equivalente a GROUPING SETS, con el conjunto completo (2n combinaciones de las dimensiones en la lista de entrada) de su lista de entrada como sus GROUPING SETS.

Las siguientes cláusulas son equivalentes:

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.

Las siguientes cláusulas son equivalentes:

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

Columnas compuestas en ROLLUP que incluyen un conjunto de agrupamiento dentro de un ROLLUP

Las siguientes cláusulas son equivalentes:

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

Columnas compuestas en CUBE que incluyen un conjunto de agrupación dentro de un CUBE

Las siguientes cláusulas son equivalentes:

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

GROUP BY que contiene GROUPING SETS, ROLLUP o CUBE

Las siguientes cláusulas son equivalentes:

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

Las siguientes cláusulas son equivalentes:

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

Las siguientes cláusulas son equivalentes:

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 incluido en una lista GROUPING SETS

Las siguientes cláusulas son equivalentes:

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

ROLLUP incluido en el interior de un conjunto de agrupamiento

Las siguientes cláusulas son equivalentes:

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