Equivalentes GROUPING SETS

Uma cláusula GROUP BY que use GROUPING SETS pode gerar um conjunto de resultados equivalente ao gerado por um UNION ALL de múltiplas cláusulas simples GROUP BY. GROUPING SETS pode gerar um resultado equivalente ao gerado por uma operação simples GROUP BY, ROLLUP ou CUBE. Combinações diferentes de GROUPING SETS, ROLLUP ou CUBO podem gerar conjuntos de resultados equivalentes.

Este tópico oferece exemplos de equivalentes GROUPING SETS. As seguintes abreviações são usadas nos exemplos:

  • Agg(): qualquer função de agregação

  • (arg): um argumento

GROUPING SETS equivalentes a UNION ALL

Especificar GROUPING SETS (<conjunto de agrupamento> [,...n ]) como a lista GROUP BY é equivalente a UNION ALL de consultas, cada uma das quais com os conjuntos de agrupamentos como sua lista GROUP BY. Agregar em números de ponto flutuante pode retornar resultados ligeiramente diferentes.

As seguintes instruções são 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

GROUPING SETS equivalentes a um GROUP BY simples

As cláusulas seguintes retornam os mesmos totais gerais:

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

As cláusulas seguintes retornam os mesmos conjuntos únicos:

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

Equivalentes a GROUPING SETS ROLLUP

GROUP BY ROLLUP (<lista de elementos compostos>) com dimensões n na lista de entrada é equivalente a GROUPING SETS, com todos os prefixos (n+1) de sua lista de entrada como seus GROUPING SETS.

As cláusulas seguintes são 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 a GROUPING SETS CUBE

GROUP BY CUBE (<lista de elementos compostos>) com dimensões n na lista de entrada é equivalente a GROUPING SETS, com todo o conjunto (2n combinações de dimensões na lista de entrada) de sua lista de entrada como seus GROUPING SETS.

As cláusulas seguintes são 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.

As cláusulas seguintes são equivalentes:

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

Colunas compostas em ROLLUP que incluam um conjunto de agrupamentos dentro de um ROLLUP

As cláusulas seguintes são equivalentes:

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

Colunas compostas em CUBE que incluam um conjunto de agrupamentos dentro de um CUBE

As cláusulas seguintes são equivalentes:

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

GROUP BY que contenha GROUPING SETS, ROLLUP ou CUBE

As cláusulas seguintes são equivalentes:

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

As cláusulas seguintes são equivalentes:

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

As cláusulas seguintes são 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 incluído em uma lista de GROUPING SETS

As cláusulas seguintes são equivalentes:

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

ROLLUP incluído dentro de um conjunto de agrupamentos

As cláusulas seguintes são equivalentes:

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