W tabeli z mieszkańcami jedna miejscowość może wystąpić wiele razy (wielu mieszkańców z tego samego miasta). Jeżeli pytanie dotyczy tego, ile różnych miast występuje w danych, to nie interesuje nas liczba rekordów, tylko liczba unikatowych wartości w kolumnie miasto.
Funkcja COUNT() zlicza wartości (zwykle nie-NULL) i zwraca jedną liczbę. Dodanie DISTINCT wewnątrz COUNT powoduje, że przed zliczeniem baza traktuje powtarzające się nazwy miast jako jedną wartość. Dlatego poprawna postać to:
SELECT COUNT(DISTINCT miasto) FROM mieszkancy;
Dlaczego pozostałe propozycje nie spełniają celu?
- SELECT DISTINCT miasto FROM mieszkancy; usuwa duplikaty, ale zwraca listę miast (wiele wierszy), a nie jedną liczbę. To dobre do uzyskania zestawu wartości, lecz nie odpowiada wprost na pytanie "ile?".
- SELECT COUNT(miasto) FROM mieszkancy; zwróci liczbę wszystkich niepustych wpisów w kolumnie miasto, czyli w praktyce liczbę osób z uzupełnionym miastem. Powtórzenia będą policzone wielokrotnie, więc wynik nie będzie liczbą różnych miast.
- SELECT COUNT(miasto) FROM mieszkancy DISTINCT; jest niepoprawne składniowo w typowych dialektach SQL: słowo DISTINCT nie występuje w tym miejscu zapytania. DISTINCT stosuje się po SELECT lub wewnątrz wybranych funkcji agregujących.
Wskazówka egzaminacyjna: gdy widzisz sformułowanie "ile różnych/unikatowych …", najczęściej szukasz wzorca COUNT(DISTINCT kolumna). Gdy jest "w podziale na …", zwykle dochodzi jeszcze GROUP BY.