GROUP BY indique la liste des colonnes utilisées pour partitionner l'ensemble des lignes filtrées par la clause WHEREGROUP BY col1 [, col2, ...]GROUP BY regroupe les données qui ont la même valeur sur une ou plusieurs colonnes.GROUP BYGROUP BY. Certains SGBD acceptent de simplifier la clause GROUP BY avec la clé primaire associée aux colonnes non agrégées.SELECT * FROM etudiant;
etud_num | etud_nom | etud_prenom | etud_adresse | etud_naissance | dip_id
----------+----------+-------------+---------------------------+----------------+--------
20000001 | Martin | Jacques | Résidence de la pommeraie | 1995-01-01 | 1
20000002 | Martin | Pierre | Résidence de la pommeraie | 1995-10-21 | 1
20000003 | Dalton | Joe | Pénitencier fédéral | 1865-04-01 |
20000004 | Dalton | Jack | Pénitencier fédéral | 1866-07-04 |
20000005 | Dalton | William | Pénitencier fédéral | 1867-11-28 |
20000006 | Dalton | Averell | Pénitencier fédéral | 1868-12-25 |
(6 rows)
SELECT COUNT(*), etud_nom FROM etudiant GROUP BY etud_nom;
count | etud_nom
-------+----------
4 | Dalton
2 | Martin
(2 rows)SELECT col1, aggrégation(col2) FROM R GROUP BY col1 est exécutée suivant l'algorithme suivant :
ENTRÉE : une relation R(col1, col2, ...)
SORTIE : une relation S(col1, valAggrégée)
VARIABLE
catégorie[] un tableau de données de même type que col1;
valAggrégée une valeur issue de la fonction aggrégation;
cat une valeur de catégorie[];
DÉBUT
S := ∅
catégorie[] := SELECT DISTINCT col1 FROM R;
POUR CHAQUE cat DANS catégorie[] FAIRE
valAggrégée := SELECT aggrégation(col2) FROM R WHERE col1=cat;
S := S ∪ (cat, valAggrégée);
FIN POUR
RETOURNER S;
FIN