GROUP BY
regroupe les données qui ont la même valeur sur une ou plusieurs colonnes.GROUP 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