在两个不同的条件下选择计数

时间:2013-05-02 19:31:28

标签: mysql

假设我有以下数据。

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

现在,我想要在查询中包含第二个组件。

对于name_id 10,我想只计算那些已完成为1的值。对于另一个name_id,我想选择它们,无论它们是0还是1。

所以我最终应该:

name_id     count(*)
10            1
15            3
20            2

Name_id 10的计数只有1,因为它只是完成的1,而其他计数包括0和1。

任何人都可以帮忙完成这项任务。

谢谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

排除name_id = 10completed = 0

的行
SELECT name_id, COUNT(*) FROM db 
WHERE NOT (completed = 0 AND name_id = 10)
GROUP BY name_id

答案 2 :(得分:1)

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

答案 3 :(得分: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