我有a
两个字段的表:id
(PK) 和f
.
考虑以下记录:
id | f
1 | NULL
2 | 'foo'
3 | 'bar'
4 | NULL
5 | 'foo'
6 | 'baz'
我想检索并计算所有具有不同f
值的记录,包括每条记录WHERE f IS NULL
。给定这个条件,查询应该返回除 #5 之外的所有记录,因为相同的值已经包含在集合中,并且总计数为 5。
我用来检索所有记录的查询如下所示:
SELECT CASE WHEN EXISTS (SELECT id FROM a a2 WHERE a2.f = a.f AND a.id < a2.id) THEN 1 END AS not_distinct FROM a HAVING not_distinct IS NULL
如果可以改进此查询,我欢迎任何反馈。无论如何,主要问题是计数。显然COUNT(*)
在这里添加 a 无济于事,我完全不知道如何在过滤后计算记录。