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

SELECT MAX(wiek) - MIN(wiek) FROM uczestnicy; Przedstawione zapytanie SELECT wykonane na tabeli przechowującej dane o uczestnikach konkursu ma za...

SELECT MAX(wiek) - MIN(wiek) FROM uczestnicy;
Przedstawione zapytanie SELECT wykonane na tabeli przechowującej dane o uczestnikach konkursu ma za zadanie wybrać
A. średnią arytmetyczną wieku uczestników.
B. liczbę najstarszych uczestników.
C. różnicę wieku pomiędzy najstarszym i najmłodszym uczestnikiem.
D. minimalny oraz maksymalny wiek uczestników.

Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).

Zapytanie SELECT MAX(wiek) - MIN(wiek) FROM uczestnicy; zwraca różnicę między największą i najmniejszą wartością w kolumnie wiek, czyli rozstęp wieku uczestników. Funkcja agregująca MAX(wiek) wyszukuje wiek najstarszego uczestnika, a MIN(wiek) wiek najmłodszego. Dopiero potem wykonywane jest odejmowanie, więc wynik nie pokazuje dwóch osobnych wartości, tylko jedną liczbę. Przykładowo, jeśli najmłodszy uczestnik ma 12 lat, a najstarszy 19 lat, wynik zapytania wyniesie 7. W praktyce takie zapytania są przydatne przy analizie danych, np. gdy organizator konkursu chce sprawdzić, jak duże jest zróżnicowanie wieku w grupie. Moim zdaniem warto od razu nadawać takim kolumnom alias, np. SELECT MAX(wiek) - MIN(wiek) AS roznica_wieku FROM uczestnicy;, bo wtedy wynik w raporcie jest czytelniejszy. To jest też dobra praktyka w SQL: funkcje agregujące stosujemy świadomie, a wynik obliczenia opisujemy nazwą zrozumiałą dla osoby, która później będzie analizowała dane.
W tym zapytaniu łatwo się pomylić, bo występują jednocześnie funkcje MAX oraz MIN. Samo ich pojawienie się nie oznacza jednak, że baza danych zwróci minimalny oraz maksymalny wiek jako dwie oddzielne kolumny. Gdyby taki był cel, zapytanie wyglądałoby raczej tak: SELECT MIN(wiek), MAX(wiek) FROM uczestnicy;. Tutaj między wartościami znajduje się operator odejmowania, więc system najpierw wyznacza największą i najmniejszą wartość, a następnie oblicza ich różnicę. To dość typowy błąd: ktoś widzi nazwy funkcji i nie patrzy na działanie arytmetyczne między nimi. Zapytanie nie liczy też średniej wieku, bo do tego służy funkcja AVG(wiek). Średnia arytmetyczna to suma wartości podzielona przez ich liczbę, a nie różnica skrajnych wyników. Nie ma tu również liczenia najstarszych uczestników. Do zliczania rekordów używa się COUNT, często razem z warunkiem WHERE albo podzapytaniem, np. gdy trzeba policzyć osoby mające wiek równy maksymalnemu. Warto zapamiętać, że funkcje agregujące w SQL przetwarzają wiele wierszy i zwracają zwykle jedną wartość dla całej tabeli lub grupy. Jeśli połączymy je operatorem matematycznym, dostajemy już wynik obliczenia, a nie zestaw surowych informacji. Z mojego doświadczenia najlepiej czytać takie zapytanie od środka: najpierw MAX i MIN, potem znak minus, a dopiero na końcu sens całego SELECT-a.

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.