66

I am building a query for a report with multiple IF conditions on the SUM. I am having problems with a multiple IF conditions on the SUM.

Here is the query:

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

This query works just fine.

When I try to add the below conditional SUM statement:

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

This conditional IF statement fails out.

I have a column called 'TotalAmount' and a column called 'PaymentType' I am looking to create a SUM of the credit card transactions by each day, a SUM of the checks transactions by each day, a SUM of the paypal transactions by each day,. I have tried to create a subquery but this returns a value for the entire TotalAmount column, not broken down by day.

2 Answers 2

122

Try with a CASE in this way :

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

Should give what you are looking for ...

Sign up to request clarification or add additional context in comments.

6 Comments

@aleroot is there any difference between SUM(CASE WHEN .. THEN .. ELSE .. END) and SUM(IF(.., .., ..)) when I would like check only one condition (if some boolean field is 1)? I mean, which one should be faster?
Could be done as an if eg: SUM(IF(PaymentType = "credit card", TotalAmount, 0) AS CreditCardTotal,
@George: Yes, I believe IF is equivalent.
@NHG: I suspect that the performance is identical, but I haven't tested.
I just tested with large amount of rows and got same performance
|
69

How about this?

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

2 Comments

It doesn't work in MsSql. the (IF) statement is doing something else.
@Sayedidrees: OK, but the question was about MySQL.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.