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: Programowanie webowe Bazy danych

Słowa kluczowe: AVG() w SQL COUNT() w SQL Funkcje agregujące w SQL SELECT w SQL WHERE w SQL

Dana jest tabela o nazwie przedmioty z polami ocena i uczenID. Aby policzyć średnią ocen ucznia o ID równym 7, należy posłużyć się zapytaniem

A.
SELECT AVG(ocena) FROM przedmioty WHERE uczenID=7;
B.
COUNT SELECT ocena FROM przedmioty WHERE uczenID=7;
C.
AVG SELECT ocena FROM przedmioty WHERE uczenID=7;
D.
SELECT COUNT(ocena) FROM przedmioty WHERE uczenID=7;

Pytanie z egzaminu CKE, czerwiec 2017 (arkusz E.14-X-17.06).

Zapytanie SELECT AVG(ocena) FROM przedmioty WHERE uczenID=7; jest poprawne, bo używa funkcji agregującej AVG() dokładnie do tego, do czego została zaprojektowana: obliczania średniej wartości z wybranej kolumny. Najpierw klauzula WHERE ogranicza rekordy tylko do ocen ucznia, którego uczenID wynosi 7, a dopiero z tych przefiltrowanych wierszy funkcja AVG(ocena) liczy średnią. Taka kolejność logiczna jest bardzo ważna w SQL, bo inaczej policzylibyśmy średnią dla całej tabeli, czyli dla wszystkich uczniów. W praktyce takie zapytanie przydaje się np. w dzienniku elektronicznym, panelu nauczyciela albo raporcie wyników ucznia. Moim zdaniem warto od razu zapamiętać schemat: SELECT funkcja(kolumna) FROM tabela WHERE warunek;. To jest zgodne z typowym standardem SQL i dobrą praktyką, bo zapytanie jest czytelne, krótkie i robi jedną konkretną rzecz. Dodatkowo można nadać alias, np. SELECT AVG(ocena) AS srednia_ocen FROM przedmioty WHERE uczenID=7;, żeby wynik miał bardziej opisową nazwę kolumny.
Niepoprawne rozwiązania wynikają głównie z pomieszania składni SQL albo z pomylenia funkcji agregujących. W SQL zapytanie odczytujące dane zaczyna się od SELECT, a dopiero po nim wpisuje się kolumny, wyrażenia lub funkcje, które mają zostać zwrócone. Sam zapis AVG SELECT ocena FROM ... nie jest poprawną składnią, ponieważ AVG nie jest poleceniem rozpoczynającym zapytanie, tylko funkcją używaną wewnątrz listy SELECT. To dość częsty błąd, bo ktoś kojarzy, że ma być średnia, więc próbuje postawić AVG na początku, ale parser SQL tego nie zrozumie. Równie ważne jest odróżnienie AVG() od COUNT(). Funkcja COUNT(ocena) zlicza liczbę niepustych wartości w kolumnie ocena, czyli powie ile ocen ma uczeń, a nie jaka jest ich średnia. Gdyby uczeń miał oceny 3, 4 i 5, COUNT zwróci 3, natomiast AVG zwróci 4. To zupełnie inna informacja. Zapis COUNT SELECT ocena FROM ... ma z kolei ten sam problem składniowy co wariant z AVG na początku: funkcja została ustawiona w złym miejscu. Dobra praktyka jest taka, żeby najpierw jasno określić, czy chcemy coś policzyć ilościowo, zsumować, znaleźć minimum, maksimum czy średnią. Dopiero potem dobieramy funkcję agregującą: COUNT(), SUM(), MIN(), MAX() albo AVG(). W tym zadaniu pytanie mówi o średniej ocen, więc właściwym wyborem jest AVG(ocena), a warunek WHERE uczenID=7 służy tylko do wskazania konkretnego ucznia.

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.