SQL: Comment appliquer un WHERE à un SUM

Yo,

Si comme moi, vous avez besoin de réaliser un SUM en sql, dans mon cas pour calculer un chiffre d'affaires de manière détaillée. Vous aimeriez sûrement pouvoir appliquer un WHERE à un SUM sans perdre vos autres filtres.

Prenons une DB d'exemple:

id | facture_id | montant | active | paid  
 1 |          1 |     300 |      1 |    1
 2 |          3 |    1000 |      0 |    1
 3 |          5 |    4000 |      1 |    1
 4 |          6 |     200 |      0 |    0
 5 |          7 |     150 |      1 |    0

On va faire en sorte de récupéré:

  • Montant des factures actives et payées
  • Montant des factures non actives et payées
  • Montant des factures non payées

SUM est donc une fonction SQL qui prend en paramètre une column. On va pouvoir y appliquer un CASE.

Un case se compose comme ceci:

case [column] when [votre/vos condition(s)] then [la valeur] else [valeur défaut] end  
ou  
case when [votre/vos condition(s)] then [la valeur] else [valeur défaut] end  
SELECT  
SUM( case when active = 1 and paid = 1 then montant else 0 end) actives_paid,  
SUM( case when active = 0 and paid = 1 then montant else 0 end) n_actives_paid,  
SUM( case paid when 0 then montant else 0 end) n_paid  
from factures  

Vous pouvez bien sûr appliquer d'autre condition via le WHERE après le FROM et même des GROUP BY.

Voilà voilà!

comments powered by Disqus