PaliSkill
SQL débutant

Leçon 9 / 10 — Chapitre 6: GROUP BY et HAVING

La règle des colonnes non agrégées

Cette leçon revient en détail sur une règle déjà croisée plusieurs fois dans ce chapitre, tant elle est une source fréquente d'erreurs : toute colonne du SELECT qui n'est pas enveloppée dans une fonction d'agrégation doit apparaître dans le GROUP BY.

SELECT categorie, nom, COUNT(*) FROM produits GROUP BY categorie;

Ce code est invalide : nom apparaît dans le SELECT, n'est ni agrégé (pas de COUNT/SUM/etc. autour de lui) ni présent dans le GROUP BY — pour un groupe papeterie contenant à la fois Cahier et Stylo, le moteur SQL ne peut pas décider quel nom afficher sur l'unique ligne du groupe.

Deux corrections possibles, selon l'intention réelle :

SELECT categorie, nom, COUNT(*) FROM produits GROUP BY categorie, nom;

Cette version ajoute nom au GROUP BY : chaque combinaison categorie/nom devient son propre groupe, et puisque chaque produit possède un nom unique, COUNT(*) vaut 1 pour chacun — un regroupement qui n'apporte plus grand-chose ici.

SELECT categorie, COUNT(*) FROM produits GROUP BY categorie;

Cette version retire simplement nom du SELECT : le regroupement reste utile, sans référencer une colonne qui n'a pas de sens à afficher au niveau du groupe.

À retenir :

  • Une colonne du SELECT ni agrégée ni présente dans GROUP BY rend la requête invalide.
  • Corriger en ajoutant la colonne au GROUP BY (change la définition des groupes) ou en la retirant du SELECT, selon l'intention réelle.

À vous de jouer : identifiez pourquoi SELECT categorie, prix, AVG(stock) FROM produits GROUP BY categorie; est invalide, et corrigez-la.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 84 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès