web-dev-qa-db-fra.com

Requête de somme MYSQL avec condition IF

Je crée une requête pour un rapport avec plusieurs conditions IF sur le SUM. J'ai des problèmes avec plusieurs conditions IF sur SUM.

Voici la requête:

SELECT SUM(`totalamount`) AS Total, 
SUM(`PayPalFee`) AS Fees,
DATE(`TransactionDate`) AS `Day`, 
SUM(IF(PaymentType = "Paypal", 1,0)) AS Paypal, 
SUM(IF(PaymentType = "check", 1,0)) AS Checks, 
SUM(IF(PaymentType = "credit card", 1,0)) AS CreditCard, 
COUNT(*) AS Entries
 FROM my_table
 WHERE TransactionDate between '2011-05-05' AND '2012-01-30'
 GROUP BY day
 ORDER BY `day` ASC

Cette requête fonctionne très bien.

Lorsque j'essaie d'ajouter l'instruction SUM conditionnelle ci-dessous:

 SUM('TotalAmount'(PaymentType = "credit card", 1,0)) AS CreditCardTotal,

Cette instruction IF conditionnelle échoue.

J'ai une colonne appelée "TotalAmount" et une colonne intitulée "PaymentType" Je cherche à créer un SUM des transactions par carte de crédit chaque jour, un SUM des transactions par chèque par jour, un SUM des transactions Paypal par jour ,. J'ai essayé de créer une sous-requête, mais cela renvoie une valeur pour la colonne TotalAmount entière, non ventilée par jour.

34
Matthew Colley

Essayez avec un CAS de cette manière:

SUM(CASE 
    WHEN PaymentType = "credit card" 
    THEN TotalAmount 
    ELSE 0 
END) AS CreditCardTotal,

Doit donner ce que vous cherchez ...

78
aleroot

Que dis-tu de ça?

SUM(IF(PaymentType = "credit card", totalamount, 0)) AS CreditCardTotal
42
Scott Hunter