2013-05-02 48 views
3

假設我有以下數據。在兩個單獨的條件下選擇計數

id name_id completed 
1 10   1 
2 10   0 
3 15   1 
4 10   0 
5 20   1 
6 15   0 
7 20   1 
8 15   0 

我試圖找到名字的ID,這是非常簡單的計數現在

SELECT name_id, COUNT(*) FROM db 
GROUP BY name_id 

,我有我要在查詢到包括第二部分。

對於名_ID 10,我要算剛剛那些完成值是1。對於其他名_ID的,我想選擇他們,無論他們是否是0或1。

所以我應該結束了:

name_id  count(*) 
10   1 
15   3 
20   2 

名_ID 10只具有計數1,因爲它只是已結束1,而其他罪名包括0和1

任何人都可以完成這個任務有所幫助。

謝謝!

回答

4

您可以在您的聚合函數內部使用CASE表達式。

SELECT name_id, 
    sum(case 
      when name_id = 10 
      then case when completed = 1 then 1 else 0 end 
      else 1 end) Total 
FROM db 
GROUP BY name_id; 

SQL Fiddle with Demo

3

排除其中name_id = 10completed = 0行:

SELECT name_id, COUNT(*) FROM db 
WHERE NOT (completed = 0 AND name_id = 10) 
GROUP BY name_id 
1
SELECT name_id, COUNT(*) FROM db 
WHERE name_id != 10 or completed = 1 
GROUP BY name_id 
1

計數時name_id不是10.如果是10,計數當completed = 1:

SELECT 
name_id, 
COUNT(CASE WHEN name_id <> 10 or completed = 1 THEN 1 END) 
FROM db 
GROUP BY name_id