通过查询SQL查询只查找启用的记录
问题描述:
我有一个如下所示的MySQL表,我想查找完全禁用的人的名字。通过查询SQL查询只查找启用的记录
这是我的表:
+----+----------+---------+
| id | name | enabled |
+----+----------+---------+
| 1 | person 1 | 1 |
| 2 | person 1 | 0 |
| 3 | person 2 | 0 |
| 4 | person 2 | 0 |
| 5 | person 3 | 1 |
| 6 | person 3 | 1 |
+----+----------+---------+
(在enabled
列代表一个布尔值)
在这种情况下,我只是想找到人2,因为这两个记录被禁用。我不想找到人1,因为人1在第1行中仍处于启用状态,并且人3已完全启用,因此on也应排除。
答
您可以聚集和having
条款做到这一点:
select name
from t
group by name
having max(enabled) = 0;
答
SELECT name
FROM table
GROUP BY name
HAVING MIN(enabled) = 0 AND COUNT(1) = 1;
真棒。我刚刚想出了'select * from p group by name having sum(enabled)= 0'。你的可能会更好。 –
@Erik我真的很喜欢这个解决方案。它正是*你正在寻找的东西。 – Pachonk
@Erik。 。 。对于你的数据来说,两者几乎是等价的。 –