PaliSkill
SQL débutant

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

HAVING contre WHERE

WHERE et HAVING filtrent tous deux des lignes, mais à des moments différents du traitement d'une requête — une confusion fréquente à ne jamais commettre.

| | WHERE | HAVING | |---|---|---| | Filtre quoi | Des lignes individuelles | Des groupes déjà formés | | S'exécute | Avant GROUP BY | Après GROUP BY | | Référence une agrégation | Jamais | Oui, directement |

SELECT categorie, COUNT(*)
FROM produits
WHERE prix > 100
GROUP BY categorie
HAVING COUNT(*) > 1;

Ce que fait chaque partie, dans l'ordre réel d'exécution :

  1. WHERE prix > 100 exclut Stylo (100 $ exactement, non strictement supérieur), avant tout regroupement.
  2. GROUP BY categorie regroupe les lignes restantes par catégorie.
  3. HAVING COUNT(*) > 1 ne garde que les groupes ayant plus d'une ligne, après le regroupement.

Sur les 5 lignes restantes après WHERE : papeterie (Cahier seul, Stylo exclu) → 1, exclu par HAVING. hygiene2, conservé. boisson1, exclu. alimentaire1, exclu. Seule hygiene apparaît dans le résultat final.

À retenir :

  • WHERE filtre des lignes avant le regroupement ; HAVING filtre des groupes après le regroupement.
  • Utiliser WHERE dès que possible reste préférable : il élimine des lignes plus tôt, avant même que l'agrégation ne les traite.

À vous de jouer : modifiez la requête de cette leçon pour garder les groupes ayant au moins 1 produit, et déterminez si le résultat change.

🔒

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