假设我有以下数据。
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。
任何人都可以帮忙完成这项任务。
谢谢!
答案 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;
答案 1 :(得分:3)
排除name_id = 10
和completed = 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