2012-01-04 21 views
25

SUM üzerinde birden çok IF koşuluyla bir rapor için bir sorgu oluşturuyorum. SUM üzerinde bir çok IF koşulunda sorun yaşıyorum.MYSQL Toplam Sorgu, IF Durumu

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 

Bu sorgu sadece çalışıyor: İşte

sorgusu olur.

aşağıda koşullu SUM deyimi eklemeyi deneyin

:

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

Bu EĞER koşullu önerme dışarı başarısız olur.

'TotalAmount' adında bir sütun ve 'PaymentType' adlı bir sütüm var. Her gün kredi kartı işlemlerinin bir SUM'unu oluşturmak için arıyorum, her güne ait çek işlemlerinin bir SUM'u, paypalın bir SUM'u her gün işlem. Bir alt sorgu oluşturmaya çalıştım ancak bu, TotalAmount sütununun tamamına, güne göre bozulmayan bir değer döndürüyor. Bu şekilde bir CASE ile

cevap

62

Dene:

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

için ... Bu nasıl hakkında

+0

Awesome! Teşekkürler, bunu kabul edemem ama yapacağım. –

+0

@aleroot 'SUM (CASE WHEN .. THEN .. ELSE .. END)' ve 'SUM (IF (.., .., ..))' arasında yalnızca bir koşulu kontrol etmek istediğimde herhangi bir fark vardır (bazı boolean alan 1 ise? Hangisi daha hızlı olmalı? – NHG

+1

Örneğin: SUM (IF (PaymentType = "kredi kartı", TotalAmount, 0) CreditCardTotal, – George

34

aradıklarını vermeli mi?

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