2017-02-23 9 views
0

私は,numberおよびfiled_onのカラムを持つentriesというテーブルを持っています。追加条件でPostgreSQLの重複する行を見つけよう

私だけcase_idnumberが同じであった重複を探していた場合、私は次のクエリを使用します。

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

しかし、私は、少なくとも、すなわち、追加的な基準でフィルタしたいと思います重複行のうちの1つは、filed_onがnullである。

私は、次のクエリが働くだろうと思ったが、私はそれがすべての重複がnullfiled_onセットを持っているところに私が代わりに行の1以上がnullfiled_onを持つ重複した行の行を複製与え思う:

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

私が欲しいものを得るためにこのクエリをどのように変更することができますか?

答えて

1

グループ化した後に確認する条件は、の代わりにHAVINGとする必要があります。条件はフィールドをグループ化するか、集約するかのいずれかでなければなりません(ちょうどSELECTのように)。

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

を参照してください:あなたは this answerのように条件を満たした行の数をカウントすることができるはずです
関連する問題