我有一个名为entries
的表,其中包含以下列:case_id
,number
和filed_on
。
如果我只是在查找case_id
和number
相同的重复项,我会使用以下查询:
SELECT case_id, number, count(*) FROM entries GROUP BY case_id, number HAVING count(*) > 1;
但我想按照一个额外的标准进行过滤,即至少有一个重复行的字段为null
。
我认为以下查询可行,但我认为它给了我重复的行,其中所有重复项都filed_on
设置为null
,而不是重复的行,其中有一行或多行{ {1}}的{1}}:
filed_on
如何修改此查询以获取我想要的内容?
答案 0 :(得分:1)
您想要一个在分组后检查的条件,而不是之前,即HAVING
而不是WHERE
。请注意,条件应该是分组字段或聚合之一(就像在SELECT
中一样)。您应该能够计算满足条件的行数,例如this answer:
SELECT case_id, number, count(*)
FROM entries
GROUP BY case_id, number
HAVING (count(*) > 1) AND (count(CASE WHEN filed_on IS NULL THEN 1 END) >= 1)
请参阅SQL Fiddle