Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

SELECT count(*) FROM Uczniowie WHERE srednia = 5; Wynikiem uruchomienia zapytania SQL jest

SELECT count(*) FROM Uczniowie WHERE srednia = 5;
Wynikiem uruchomienia zapytania SQL jest
A. liczba uczniów, których średnia ocen wynosi 5.
B. liczba wszystkich uczniów.
C. średnia ocen wszystkich uczniów.
D. suma ocen uczniów, których średnia ocen wynosi 5.

Pytanie z egzaminu CKE, czerwiec 2019 (arkusz EE.09-X-19.06).

Poprawnie – to zapytanie zwraca liczbę uczniów, których kolumna „srednia” ma wartość równą dokładnie 5. Funkcja agregująca COUNT(*) w SQL nie liczy sumy ani średniej, tylko po prostu zlicza wiersze spełniające warunek w klauzuli WHERE. W tym przypadku tabela Uczniowie jest filtrowana warunkiem srednia = 5, więc do liczenia trafiają wyłącznie rekordy uczniów, którzy mają średnią ocen równą 5. Dopiero na takim przefiltrowanym zbiorze wykonywany jest COUNT(*), który zwraca jedną liczbę – ile takich rekordów istnieje. Moim zdaniem to jedno z najczęściej używanych połączeń: WHERE + COUNT(*), bo w praktyce non stop chcemy wiedzieć „ile jest elementów spełniających warunek”. W raportach, panelach administracyjnych, dashboardach – np. ile jest klientów z określonym statusem, ilu użytkowników ma aktywne konto, ilu pracowników ma premię powyżej jakiegoś progu itd. Warto też zauważyć, że COUNT(*) liczy wszystkie wiersze, niezależnie od tego, czy jakieś inne kolumny są NULL, a kluczowe jest tylko to, że warunek WHERE jest spełniony. Dobrą praktyką jest zawsze dokładne określanie warunku filtrowania, bo drobna zmiana, np. srednia >= 5 zamiast srednia = 5, całkowicie zmienia znaczenie zapytania. W projektowaniu baz danych i zapytań SQL takie precyzyjne myślenie o warunkach i funkcjach agregujących jest absolutną podstawą profesjonalnej pracy z danymi.
To zapytanie bardzo dobrze pokazuje, jak łatwo jest pomylić różne typy operacji w SQL: zliczanie, sumowanie i obliczanie średniej. Wiele osób widząc tabelę Uczniowie i kolumnę srednia automatycznie myśli o obliczaniu średnich albo sum ocen, a tymczasem kluczowe jest tu słowo kluczowe COUNT(*) oraz warunek w klauzuli WHERE. Funkcja COUNT(*) nie oblicza ani średniej, ani sumy wartości liczbowych – ona jedynie zlicza wiersze. Niezależnie od tego, co jest w kolumnach, COUNT(*) po prostu mówi: „ile rekordów przeszło przez filtr WHERE”. Dlatego interpretacja, że wynik to liczba wszystkich uczniów, jest niepoprawna, bo zapytanie nie działa na całej tabeli, tylko na jej podzbiorze określonym przez srednia = 5. Gdyby ktoś chciał policzyć wszystkich uczniów, nie używałby warunku WHERE albo zastosowałby inny warunek, który obejmuje wszystkich.
Błędne jest też kojarzenie tego zapytania z obliczaniem średniej ocen wszystkich uczniów. Do tego służyłaby funkcja AVG(srednia) albo AVG(ocena), w zależności od struktury bazy. Tutaj nie ma żadnej funkcji AVG, więc silnik bazy danych nie wykonuje żadnego uśredniania, tylko zwykłe zliczanie rekordów. Podobnie z interpretacją, że wynik to suma ocen uczniów – do sumowania wartości liczbowych wykorzystuje się funkcję SUM(kolumna), a nie COUNT(*). Typowy błąd myślowy polega na tym, że ktoś widzi dane „szkolne” i od razu narzuca im kontekst matematyczny, ignorując faktyczną składnię SQL.
Z mojego doświadczenia wynika, że warto patrzeć na zapytania SQL w dwóch krokach: najpierw zrozumieć filtr (czyli WHERE – które rekordy przechodzą dalej), a dopiero potem funkcję agregującą (czyli co robimy z tym zbiorem: liczymy, sumujemy, uśredniamy). W tym zadaniu filtr przepuszcza wyłącznie uczniów z średnią równą 5, a agregacja COUNT(*) liczy ilu ich jest. Wszystkie inne interpretacje pojawiają się zwykle z pośpiechu, braku uwagi do słów kluczowych lub mylenia nazw funkcji agregujących, co w praktycznej pracy z bazami danych potrafi mocno wypaczyć wyniki raportów.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.