Leçon 6 / 9 — Chapitre 4: CASE WHEN et agrégation conditionnelle
La clause FILTER : une alternative à CASE dans un agrégat
FILTER (WHERE condition), ajoutée après une fonction d'agrégation, ne fait agréger que les lignes qui remplissent cette condition — une alternative plus lisible à SUM(CASE WHEN ...) pour ce cas d'usage précis.
SELECT
COUNT(*) FILTER (WHERE statut = 'actif') AS nb_actifs,
SUM(montant) FILTER (WHERE statut = 'inactif') AS total_inactif
FROM clients;
COUNT(*) FILTER (WHERE statut = 'actif') ne compte que les lignes actives : 4, exactement comme SUM(CASE WHEN statut = 'actif' THEN 1 ELSE 0 END) à la leçon précédente. SUM(montant) FILTER (WHERE statut = 'inactif') ne somme que montant pour les lignes inactives : 50.
À retenir :
fonction_agregation(...) FILTER (WHERE condition)restreint l'agrégation aux lignes qui remplissent la condition, sans toucher aux autres lignes du résultat.FILTERproduit le même résultat qu'unCASE WHENéquivalent dans la plupart des cas, mais se lit souvent plus directement.FILTERreste une extension moins universelle queCASE(norme SQL récente, PostgreSQL notamment) :CASEfonctionne partout,FILTERpas nécessairement sur tous les moteurs.
À vous de jouer : réécrivez SUM(montant) FILTER (WHERE statut = 'inactif') sous la forme équivalente avec SUM(CASE WHEN ...).
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès