2014-05-04 38 views
0

,同時還使用WHERE,但是當沒有發現一定ID記錄,我想它返回NULL,而不是隻是不返回任何東西,我想SUM()存在沒有記錄。的SQLite3:返回NULL如果SUM()

初始代碼:

SELECT 
    ID, 
    SUM(CASE WHEN EVENTS = 3 THEN 1 ELSE 0 END) 
FROM Events_ID 
WHERE 
    YEAR = 2012 
GROUP BY ID 

,如果有沒有它的事件在2012年

然後我把它改爲看起來工作,但大約是100倍的速度較慢以下這將不會返回ID

SELECT 
    ID, 
    (SELECT 
     SUM(CASE WHEN EVENTS = 3 THEN 1 ELSE 0 END) 
    FROM EVENTS_ID r WHERE r.ID = t.ID AND r.YEAR = 2012) 
FROM (SELECT * FROM Events_ID GROUP BY ID) as t; 

有沒有辦法讓第二個查詢的輸出接近第一個查詢的速度?

回答

1

這是你想要的嗎?

SELECT ID, 
     SUM(CASE WHEN EVENTS = 3 AND YEAR = 2012 THEN 1 END) 
FROM Events_ID 
GROUP BY ID; 

這將返回所有的ID,用NULL爲第二值,如果沒有事件匹配兩個條件。

+0

是的,它甚至沒有跨過我的想法做到這一點哈哈。 – rwolst