ConsigneSur la table events, compte en une seule ligne le nombre d'événements de chaque type, avec un agrégat conditionnel (COUNT ... FILTER). Colonnes : page_views (type 'page_view'), signups (type 'signup'), purchases (type 'purchase').
count(*) filter (where condition) ne compte que les lignes remplissant la condition : un agrégat conditionnel. C'est idéal pour un « pivot » (transformer des categories en colonnes) en une seule requête.
Syntaxe
COUNT(*) FILTER (WHERE condition) AS aliasÉquivaut a sum(case when condition then 1 else 0 end), en plus lisible, à une exception près : quand aucune ligne n'est agrégée, count ... filter rend 0 là où sum(case ...) rend null. Sur un groupe vide, les deux écritures ne donnent donc pas la même colonne.
Exemple (table commandes) :
SELECT COUNT(*) FILTER (WHERE statut = 'payee') AS payees, COUNT(*) FILTER (WHERE statut = 'annulee') AS annuleesFROM commandes;-> une seule ligne, une colonne par statutEnvie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →