← Guides

GROUP BY et HAVING : les erreurs classiques des débutants SQL

Pourquoi votre requête renvoie une erreur d'agrégation, et comment filtrer correctement un résultat groupé.

SQL · 7 min de lecture

WHERE filtre avant, HAVING filtre après

WHERE s'applique aux lignes brutes avant le regroupement, HAVING s'applique au résultat agrégé. Filtrer un SUM() dans un WHERE provoque toujours une erreur : la somme n'existe pas encore à ce stade de l'exécution.

Toute colonne non agrégée doit être groupée

Si vous sélectionnez client_nom et SUM(montant), client_nom doit apparaître dans le GROUP BY. PostgreSQL refuse la requête, MySQL en mode permissif renvoie une valeur arbitraire : c'est pire, car l'erreur devient silencieuse.

Compter correctement

COUNT(*) compte les lignes, COUNT(colonne) ignore les NULL et COUNT(DISTINCT colonne) compte les valeurs uniques. Trois résultats différents pour trois besoins métier différents.

Lisibilité

Nommez vos agrégats avec AS (SUM(montant) AS chiffre_affaires) : les exports CSV et les outils de reporting reprennent ces alias comme en-têtes de colonnes.