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

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

对于 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

4 回答 4

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

于 2013-05-02T19:35:24.457 回答
3

name_id = 10排除和的行completed = 0

SELECT name_id, COUNT(*) FROM db 
WHERE NOT (completed = 0 AND name_id = 10)
GROUP BY name_id
于 2013-05-02T19:35:47.143 回答
1
SELECT name_id, COUNT(*) FROM db 
WHERE name_id != 10 or completed = 1
GROUP BY name_id
于 2013-05-02T19:37:20.247 回答
1

不是 10时计数name_id。如果是 10,则在completed= 1 时计数:

SELECT
 name_id,
 COUNT(CASE WHEN name_id <> 10 or completed = 1 THEN 1 END)
FROM db
GROUP BY name_id
于 2013-05-02T19:37:23.090 回答