2017-02-23 25 views
0

我有一張表,名爲entries,它具有以下列:case_id,numberfiled_on在附加條件下在PostgreSQL中查找重複行

如果我只是在尋找重複,其中case_idnumber是一樣的,我會用下面的查詢:

SELECT case_id, number, count(*) FROM entries GROUP BY case_id, number HAVING count(*) > 1; 

但我想通過一個額外的準則,即過濾,至少1個重複行的字段爲null

我想下面的查詢會的工作,但我覺得它給我複製的,而不是重複的行,其中行的1個或多個具有filed_onnull,所有的副本都filed_on設置爲null行:

SELECT case_id, number, count(*) FROM entries WHERE filed_on IS NULL GROUP BY case_id, number HAVING count(*) > 1; 

有關如何修改此查詢以獲得我想要的任何想法?

回答

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