KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 15.
W tabeli mieszkancy zapisane są osoby z całej Polski. Aby policzyć ile różnych miast występuje w danych tabeli należy zapisać kwerendę
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Aby policzyć liczbę różnych miast, trzeba najpierw usunąć duplikaty wartości w kolumnie "miasto", a następnie je zliczyć.
Zapytanie
COUNT(DISTINCT miasto)
zwraca jedną liczbę: liczbę unikatowych nazw miast w tabeli. Samo
SELECT DISTINCT
zwraca listę, a
COUNT(miasto)
liczy także powtórzenia.

Pełne wyjaśnienie:

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.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Oznacza zliczenie liczby unikatowych (różnych) wartości w podanej kolumnie. Najpierw eliminowane są duplikaty, a dopiero potem wykonywane jest zliczanie. Wynikiem jest jedna liczba, przydatna np. do policzenia liczby różnych miast, kategorii lub typów danych.
SELECT DISTINCT zwraca zestaw unikatowych wartości jako wiele wierszy (np. listę miast), ale nie podaje ich liczby. Aby uzyskać jedną wartość liczbową, trzeba wynik "agregować" funkcją COUNT(), czyli zastosować COUNT(DISTINCT ...).
Nie. COUNT(miasto) zlicza liczbę wierszy, w których kolumna miasto nie jest NULL (często odpowiada liczbie osób). Jeśli to samo miasto występuje wiele razy, zostanie policzone wielokrotnie. Do różnych miast potrzebujesz COUNT(DISTINCT miasto).
DISTINCT usuwa duplikaty w wynikach. Gdy użyjesz go po SELECT, dostajesz unikatowe wiersze wyniku. Gdy użyjesz go wewnątrz agregacji, np. COUNT(DISTINCT kolumna), to agregacja działa na unikatowych wartościach tej kolumny.
COUNT() stosuje się, gdy chcesz otrzymać liczbę elementów spełniających warunek: liczbę rekordów w tabeli, liczbę nie-NULL w kolumnie albo liczbę różnych wartości (z DISTINCT). To typowa funkcja w raportach, statystykach i panelach administracyjnych aplikacji webowych.
W typowych implementacjach SQL wartości NULL nie są liczone przez COUNT(kolumna), a przy COUNT(DISTINCT kolumna) również zwykle nie zwiększają wyniku. W praktyce oznacza to, że brak miasta (NULL) nie powinien podnosić liczby "różnych miast". Szczegóły zależą od DBMS.
Dodaj warunek filtrujący w klauzuli WHERE, a potem użyj agregacji:
SELECT COUNT(DISTINCT miasto) FROM mieszkancy WHERE wojewodztwo = '...';
Dzięki temu liczysz unikatowe miasta tylko wśród rekordów spełniających warunek.
COUNT(*) liczy wszystkie wiersze spełniające warunek (nie zależy od NULL w kolumnach). COUNT(kolumna) liczy tylko te wiersze, gdzie wskazana kolumna ma wartość nie-NULL. W zadaniach o "różnych wartościach" zwykle potrzebujesz wariantu z DISTINCT.
W klasycznej składni SQL słowo DISTINCT występuje bezpośrednio po SELECT (dla całego wyniku) albo wewnątrz listy argumentów funkcji agregującej (np. COUNT). Dopisanie DISTINCT po FROM nie pasuje do gramatyki języka SQL, więc DBMS zgłosi błąd.
Ćwicz na prostych tabelach: zliczaj rekordy (COUNT(*)), zliczaj nie-NULL (COUNT(kolumna)) i zliczaj unikatowe wartości (COUNT(DISTINCT kolumna)). Porównuj wyniki na danych z duplikatami, bo wtedy różnice są najbardziej widoczne na egzaminie.
info

Około 63% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "Samo SELECT DISTINCT zwraca listę, a COUNT(miasto) liczy także powtórzenia."

Źródła:

  • PostgreSQL Documentation: Aggregate Functions - COUNT, sekcja "count" oraz użycie DISTINCT w agregatach, https://www.postgresql.org/docs/current/functions-aggregate.html (dostęp: 2026-02-27)
  • MySQL 8.0 Reference Manual: Aggregate (GROUP BY) Functions - COUNT() oraz składnia DISTINCT, https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html (dostęp: 2026-02-27)
  • SQLite Documentation: Core Functions - count(X) oraz count(DISTINCT X), https://www.sqlite.org/lang_aggfunc.html (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja używanego DBMS (PostgreSQL/MySQL/SQLite): sekcje o COUNT i DISTINCT
  • Kurs podstaw SQL: funkcje agregujące i GROUP BY
  • Ćwiczenia na bazach przykładowych (zliczanie unikatów w różnych kolumnach)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego