Équivalents de GROUPING SETS

Une clause GROUP BY qui utilise GROUPING SETS peut générer un jeu de résultats équivalent à celui généré par une opération UNION ALL sur plusieurs clauses GROUP BY simples. GROUPING SETS peut générer un résultat équivalent à celui généré par une simple opération GROUP BY, ROLLUP ou CUBE. Des combinaisons différentes d’opérations GROUPING SETS, ROLLUP ou CUBE peuvent générer des jeux de résultats équivalents.

Cette rubrique fournit des exemples d’équivalents de GROUPING SETS. Les abréviations suivantes sont utilisées dans les exemples :

  • Agg() : n’importe quelle fonction d’agrégation

  • (arg) : argument

Équivalents GROUPING SETS de UNION ALL

Spécifier GROUPING SETS (<jeu de regroupement> [,...n ]) comme la liste GROUP BY équivaut à effectuer une opération UNION ALL sur des requêtes ayant chacune l'un des jeux de regroupement défini comme liste GROUP BY. Les agrégats sur des nombres à virgule flottante peuvent retourner des résultats légèrement différents.

Les instructions suivantes sont équivalentes :

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

Équivalents GROUPING SETS d’une opération GROUP BY simple

Les clauses suivantes retournent les mêmes totaux globaux :

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

Les clauses suivantes retournent les mêmes jeux simples :

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

Équivalents ROLLUP de GROUPING SETS

GROUP BY ROLLUP (<liste d’éléments composites>) avec les dimensions n dans la liste d'entrée est équivalent au GROUPING SETS dont tous les préfixes (n+1) de la liste d'entrée sont définis comme GROUPING SETS.

Les clauses suivantes sont équivalentes :

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

Équivalents CUBE de GROUPING SETS

GROUP BY CUBE (<liste d’éléments composites>) avec les dimensions n dans la liste d’entrée est équivalent à GROUPING SETS dont le jeu complet (2 combinaisons n des dimensions de la liste d'entrée) dans la liste d’entrée est défini comme GROUPING SETS.

Les clauses suivantes sont équivalentes :

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.

Les clauses suivantes sont équivalentes :

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

Colonnes composites dans ROLLUP comprenant un jeu de regroupement à l'intérieur d'un ROLLUP

Les clauses suivantes sont équivalentes :

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

Colonnes composites dans CUBE comportant un jeu de regroupement à l’intérieur d’un CUBE

Les clauses suivantes sont équivalentes :

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

GROUP BY comportant des clauses GROUPING SETS, ROLLUP ou CUBE

Les clauses suivantes sont équivalentes :

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

Les clauses suivantes sont équivalentes :

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

Les clauses suivantes sont équivalentes :

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 inclus dans une liste GROUPING SETS

Les clauses suivantes sont équivalentes :

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

ROLLUP inclus dans un GROUPING SET

Les clauses suivantes sont équivalentes :

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