2015-10-15 27 views
0

我有一個SQL查詢,其中IM使用SUM有沒有辦法來總結行的值?

SELECT 
    SUM(CASE WHEN `ID_Event1` != 0 THEN 1 ELSE 0 END) AS count1, 
    SUM(CASE WHEN `ID_Event2` != 0 THEN 1 ELSE 0 END) AS count2, 
    SUM(CASE WHEN `ID_Event3` != 0 THEN 1 ELSE 0 END) AS count3, 
    SUM(CASE WHEN `ID_Event4` != 0 THEN 1 ELSE 0 END) AS count4, 
    SUM(CASE WHEN `ID_Event5` != 0 THEN 1 ELSE 0 END) AS count5 
FROM `ec_calendar` WHERE Year(`Day`)=2015 AND Month(`Day`)=6 

結果是:

enter image description here

但我想SUM這些colums。預期結果是(3 + 4 + 3 + 3 + 4)。

有沒有解決方法?

+0

是SQL或MySQL? – Alex

回答

3

然後使用+

SELECT (SUM(CASE WHEN `ID_Event1` != 0 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN `ID_Event2` != 0 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN `ID_Event3` != 0 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN `ID_Event4` != 0 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN `ID_Event5` != 0 THEN 1 ELSE 0 END) 
     ) as cnt 
FROM `ec_calendar` 
WHERE day >= '2015-06-01' and day < '2015-07-01' 

注意,我改變了WHERE條款。如果您的索引號爲day,則此方法效率更高。

的MySQL把布爾爲整數,所以你可以寫爲:

SELECT (SUM(ID_Event1 <> 0) + SUM(ID_Event2 <> 0) + 
     SUM(ID_Event3 <> 0) + SUM(ID_Event4 <> 0) + 
     SUM(ID_Event5 <> 0) 
     ) as cnt 
FROM `ec_calendar` 
WHERE day >= '2015-06-01' and day < '2015-07-01' 
+0

偉大的解決方案,非常感謝你:) – Bullman

+0

一個小問題。有沒有辦法整年獲取數據?現在,在我的應用程序中,我必須每個月調用此查詢12次。可以做一個查詢,返回這樣的想法:http://i.imgur.com/gHqTaT3.png – Bullman

+0

只要將'where'子句修改爲'2015-01-01'和'2015-12-31 」。 –

2

您可以添加計算的列。

SELECT 
SUM(CASE WHEN `ID_Event1` != 0 THEN 1 ELSE 0 END) AS count1, 
SUM(CASE WHEN `ID_Event2` != 0 THEN 1 ELSE 0 END) AS count2, 
SUM(CASE WHEN `ID_Event3` != 0 THEN 1 ELSE 0 END) AS count3, 
SUM(CASE WHEN `ID_Event4` != 0 THEN 1 ELSE 0 END) AS count4, 
SUM(CASE WHEN `ID_Event5` != 0 THEN 1 ELSE 0 END) AS count5, 
SUM(CASE WHEN `ID_Event1` != 0 THEN 1 ELSE 0 END)+ 
SUM(CASE WHEN `ID_Event2` != 0 THEN 1 ELSE 0 END)+ 
SUM(CASE WHEN `ID_Event3` != 0 THEN 1 ELSE 0 END)+ 
SUM(CASE WHEN `ID_Event4` != 0 THEN 1 ELSE 0 END)+ 
SUM(CASE WHEN `ID_Event5` != 0 THEN 1 ELSE 0 END) as total 
FROM `ec_calendar` WHERE Year(`Day`)=2015 AND Month(`Day`)=6 
相關問題