- 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 :
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 dansexpr
et 1 pour une ligne non groupée dansexpr
.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 | +-------+-------+------------+-----------------+-----------------+------------------------+