2012-01-04 76 views
25

我正在爲SUM上的多個IF條件構建查詢。我在SUM上遇到了多個IF條件問題。帶IF條件的MYSQL求和查詢

下面是該查詢:

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('TotalAmount'(PaymentType = "credit card", 1,0)) AS CreditCardTotal, 

此條件IF語句失敗了。

我有一個名爲'TotalAmount'的列和一個名爲'PaymentType'的列我期待每天創建信用卡交易的SUM,每天支票交易的總和,PayPal的SUM每天的交易。 我試圖創建一個子查詢,但是這會返回整個TotalAmount列的值,而不是按天細分。

回答

62

嘗試以這種方式CASE

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

應該給你在找什麼...

+0

太棒了!謝謝,我不能接受,但我會。 – 2012-01-04 18:40:50

+0

@aleroot'SUM(CASE WHEN .. THEN .. ELSE .. END)'和'SUM(IF(..,..,..))'之間有什麼區別,當我只想檢查一個條件如果一些布爾字段是1)?我的意思是,哪一個應該更快? – NHG 2014-02-10 13:36:53

+1

可以這樣做,如果例如:SUM(IF(PaymentType =「creditcard」,TotalAmount,0)AS CreditCardTotal,' – George 2014-06-05 14:34:08

34

這個怎麼樣?

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