Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
La clause GROUP BY identifie les colonnes de regroupement de la requête. Il est utilisé pour regrouper les lignes d'un tableau qui ont les mêmes valeurs dans toutes les colonnes répertoriées. L'ordre dans lequel les colonnes sont répertoriées n'a pas d'importance. Le résultat est de combiner chaque ensemble de lignes ayant des valeurs communes en une seule ligne de groupe qui représente toutes les lignes du groupe. Utilisez un GROUP BY pour éliminer la redondance dans la sortie et pour calculer les agrégats qui s'appliquent aux groupes. Les colonnes de regroupement doivent être déclarées lorsque la requête calcule les regroupements avec des fonctions standard telles que SUM, AVG et COUNT. Pour de plus amples informations, veuillez consulter Fonctions d’agrégation.
Syntaxe
[ GROUP BY expression [, ...] | ALL | aggregation_extension ]
où aggregation_extension est l'une des valeurs suivantes :
GROUPING SETS ( () | aggregation_extension [, ...] ) | ROLLUP ( expr [, ...] ) | CUBE ( expr [, ...] )
Paramètres
- expression
-
La liste des colonnes ou des expressions doit correspondre à la liste des expressions non agrégées de la liste de sélection de la requête. Par exemple, imaginons la requête simple suivante.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by listid, eventid order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
Dans cette requête, la liste de sélection se compose de deux expressions d’agrégation. La première utilise la fonction SUM et la seconde la fonction COUNT. Les deux autres colonnes, LISTID et EVENTID, doivent être déclarées en tant que colonnes de regroupement.
Les expressions de la clause GROUP BY peuvent également faire référence à la liste de sélection en utilisant des nombres ordinaux. Par exemple, l’exemple précédent peut être abrégé comme suit.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by 1,2 order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
- ALL
-
ALL indique de regrouper en fonction de toutes les colonnes spécifiées dans la liste SELECT, à l'exception de celles qui sont agrégées. Par exemple, considérez la requête suivante qui regroupe par
col1
etcol2
sans avoir à les spécifier individuellement dans la clause GROUP BY. La colonnecol3
est l'argument de laSUM
fonction et n'est donc pas groupée.SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
Si vous EXCLUEZ une colonne de la liste SELECT, la clause GROUP BY ALL ne regroupe pas les résultats en fonction de cette colonne spécifique.
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
- extension_d'agrégation
-
Vous pouvez utiliser les extensions d’agrégation GROUPING SETS, ROLLUP et CUBE pour effectuer plusieurs opérations GROUP BY dans une seule instruction. Pour plus d’informations sur les extensions d’agrégation et les fonctions associées, consultez Extensions de regroupement.
Exemples
Les exemples suivants utilisent la table SALES qui contient des colonnes : salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission et saletime. Pour plus d'informations sur le tableau SALES, consultezExemple de base de données.
L'exemple suivant donne des groupes de requêtes par salesid
et listid
sans qu'il soit nécessaire de les spécifier individuellement dans la clause GROUP BY. La colonne qtysold
est l'argument de la SUM
fonction et n'est donc pas groupée.
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;
salesid | listid | sum
--------+---------+------
33095 | 36572 | 2
88268 | 100813 | 4
110917 | 127048 | 1
...
L'exemple de requête suivant exclut plusieurs colonnes de la liste SELECT. GROUP BY ALL ne regroupe donc que salesid et listid.
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime
FROM sales GROUP BY ALL;
salesid | listid
--------+---------
33095 | 36572
88268 | 100813
110917 | 127048
...