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. hygiene → 2, conservé. boisson → 1, exclu. alimentaire → 1, 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 l'attestation finale.

5 000 XOF / 7,62 € / 8,31 $

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

Pour vous communiquer où envoyer le paiement.

Moyen de paiement souhaité

Nous vous contactons pour le paiement — activé dès réception.