Chapitre 4 : GROUP BY, HAVING
Le Groupement des Preuves
Une agrégation globale donne un seul chiffre. GROUP BY permet de découper les lignes en paquets (un par quartier, par type...) et de calculer un bilan pour chaque paquet. HAVING filtre ensuite ces paquets.
GROUP BY : un bilan par groupe
SELECT quartier, COUNT(*) AS nb_crimes
FROM crimes
GROUP BY quartier;SQL range les lignes dans un paquet par valeur distincte de quartier, puis calcule COUNT(*) dans chaque paquet. On peut regrouper sur plusieurs colonnes : GROUP BY quartier, type.
HAVING : filtrer après le regroupement
WHERE filtre les lignes avant le regroupement ; HAVING filtre les groupes après l'agrégation. On ne peut donc pas écrire WHERE COUNT(*) > 3.
SELECT quartier, COUNT(*) AS nb_crimes
FROM crimes
GROUP BY quartier
HAVING COUNT(*) > 4;SELECT quartier, COUNT(*) AS nb_graves
FROM crimes
WHERE gravite >= 4
GROUP BY quartier
HAVING COUNT(*) >= 2
ORDER BY nb_graves DESC;L'ordre d'une requête complète
| Écrit dans cet ordre | Rôle |
|---|---|
| SELECT | les colonnes / calculs à afficher |
| FROM | la table |
| WHERE | filtre les lignes |
| GROUP BY | forme les groupes |
| HAVING | filtre les groupes |
| ORDER BY | trie le résultat |
| LIMIT | limite le nombre de lignes |
À toi de jouer : Exercice guidé
Affiche chaque type de crime avec son nombre de cas, mais seulement ceux qui apparaissent plus de 3 fois.