Catégories :

Fonctions d’agrégation (Général)

GROUPING

Décrit quelle expression parmi une liste d’expressions est regroupée dans une ligne produite par une requête GROUP BY.

Alias :

GROUPING_ID

Syntaxe

GROUPING( <expr1> [ , <expr2> , ... ] )

Notes sur l’utilisation

GROUPING n’est pas une fonction d’agrégat, mais plutôt une fonction d’utilité pouvant être utilisée avec l’agrégation pour déterminer le niveau d’agrégation pour lequel une ligne a été générée :

  • GROUPING(expr) renvoie 0 pour une ligne groupée dans expr et 1 pour une ligne non groupée dans expr.

  • GROUPING(expr1, expr2 , …, exprN) renvoie la représentation entière d’un vecteur bit contenant GROUPING(expr1) , GROUPING(expr2) , …, GROUPING(exprN).

Exemples

Groupez par ensembles :

Créer et remplir une table avec des valeurs :

CREATE OR REPLACE TABLE aggr2(col_x int, col_y int, col_z int);
INSERT INTO aggr2 VALUES(1, 2, 1), (1, 2, 3);
INSERT INTO aggr2 VALUES(2, 1, 10), (2, 2, 11), (2, 2, 3);

Afficher les valeurs dans la table :

SELECT * FROM aggr2 ORDER BY col_x, col_y, col_z;
+-------+-------+-------+
| COL_X | COL_Y | COL_Z |
|-------+-------+-------|
|     1 |     2 |     1 |
|     1 |     2 |     3 |
|     2 |     1 |    10 |
|     2 |     2 |     3 |
|     2 |     2 |    11 |
+-------+-------+-------+

Sortie :

SELECT col_x, col_y, sum(col_z), 
       grouping(col_x), grouping(col_y), grouping(col_x, col_y)
    FROM aggr2 GROUP BY GROUPING SETS ((col_x), (col_y), ())
    ORDER BY 1, 2;
+-------+-------+------------+-----------------+-----------------+------------------------+
| COL_X | COL_Y | SUM(COL_Z) | GROUPING(COL_X) | GROUPING(COL_Y) | GROUPING(COL_X, COL_Y) |
|-------+-------+------------+-----------------+-----------------+------------------------|
|     1 |  NULL |          4 |               0 |               1 |                      1 |
|     2 |  NULL |         24 |               0 |               1 |                      1 |
|  NULL |     1 |         10 |               1 |               0 |                      2 |
|  NULL |     2 |         18 |               1 |               0 |                      2 |
|  NULL |  NULL |         28 |               1 |               1 |                      3 |
+-------+-------+------------+-----------------+-----------------+------------------------+