带有IF条件的MYSQL求和查询

65

我正在为一份具有多个IF条件的报告构建查询。在对SUM进行多个IF条件的操作时,我遇到了问题。

以下是查询:

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

这个查询运行得很好。

当我尝试添加下面的条件SUM语句:

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

这个条件语句不起作用。

我有一个名为'TotalAmount'的列和一个名为'PaymentType'的列,我想创建每天信用卡交易总额、每天支票交易总额和每天PayPal交易总额的总和。 我尝试创建一个子查询,但这会返回整个TotalAmount列的值,而不是按每天细分。

2个回答

118

可以尝试使用CASE语句来实现:

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

应该可以给你想要的东西...


@aleroot,当我只想检查一个布尔字段是否为1时,SUM(CASE WHEN .. THEN .. ELSE .. END)SUM(IF(.., .., ..))之间有什么区别吗?我的意思是,哪一个更快? - NHG
4
可以使用if函数实现,例如:SUM(IF(PaymentType = "信用卡", TotalAmount, 0) AS 信用卡总额, - George
@George:是的,我相信IF是等价的。 - Mark Doliner
@NHG:我怀疑性能是相同的,但我还没有测试过。 - Mark Doliner
3
我刚刚测试了大量行,并获得了相同的性能表现。 - Henri Cavalcante
请参阅MySQL - CASE vs IF Statement vs IF function,了解语法和用例差异(尽管没有性能比较)。 - Melebius

67

这个怎么样?

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

它在MsSql中不起作用。 (IF)语句正在执行其他操作。 - Sayed Muhammad Idrees
15
好的,但问题是关于MySQL的。 - Scott Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接