(PK) とa
の 2 つのフィールドを持つテーブルがあります。id
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
このクエリを改善できる場合は、フィードバックをお待ちしております。とにかく、主な問題はカウントです。明らかにここで a を追加してCOUNT(*)
も役に立たず、フィルタリング後にレコードをカウントする方法が完全に失われています。