Exercice 58 / 60

Agrégats conditionnels — COUNT FILTER

Sur 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), mais plus lisible.

COUNT(*) FILTER ne compte dans chaque seau que les lignes qui remplissent sa condition, ce qui donne une colonne par statut en une seule requête

Exemple (table commandes) :

SELECT COUNT(*) FILTER (WHERE statut = 'payee') AS payees, COUNT(*) FILTER (WHERE statut = 'annulee') AS annulees FROM commandes; -> une seule ligne, une colonne par statut
events
iduser_idevent_typepayloadcreated_atevent_timechannel
query.sql

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →