I have table a with two fields: id (PK) and f.
Consider following records:
id | f
1 | NULL
2 | 'foo'
3 | 'bar'
4 | NULL
5 | 'foo'
6 | 'baz'
I want to retrieve and count all the records having distinct f values including every record WHERE f IS NULL. Given this criteria, the query should return every record except #5, because the same value is already included in the set, and the total count would be 5.
The query I'm using to retrieve all records looks like this:
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
If this query could be improved, I'd welcome any feedback. Anyway, the main problem is counting. Obviously adding a COUNT(*) will not help here and I'm totally lost how to count the records after the filtering.
the query should return every record except #5, because the same value is already included in the set, and the total count would be 5.