Przejdź do głównej treści
  1. Strona główna
  2. Technik informatyk
  3. INF.03
  4. Pytanie

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

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych

Wynikiem realizacji kwerendy
SELECT sezon, SUM(liczba_dn) FROM rezerwacje GROUP BY sezon;
na podstawie poniższej tabeli rezerwacje jest:

rezerwacje
sezonliczba_dn
lato10
zima4
lato5
zima6
lato5
zima9
zima8

W tej kwerendzie kluczowe są dwa elementy: funkcja agregująca SUM oraz klauzula GROUP BY. Instrukcja SELECT sezon, SUM(liczba_dn) FROM rezerwacje GROUP BY sezon; nie wypisuje każdego rekordu osobno, tylko najpierw dzieli rekordy na grupy według wartości w kolumnie sezon, a potem dla każdej grupy sumuje wartości z kolumny liczba_dn. Dla sezonu lato mamy wartości 10, 5 i 5, więc suma wynosi 20. Dla sezonu zima mamy 4, 6, 9 i 8, więc suma wynosi 27. Wynik to więc: lato 20 oraz zima 27. Moim zdaniem to jeden z najważniejszych schematów w SQL, bo bardzo często w praktyce trzeba policzyć sprzedaż według miesięcy, liczbę rezerwacji według sezonu albo łączny czas pracy według pracownika. Dobra praktyka jest taka, żeby kolumnę z wynikiem agregacji nazywać aliasem, np. SUM(liczba_dn) AS razem_dni. Wtedy wynik jest czytelniejszy, szczególnie w aplikacjach webowych, raportach i panelach administracyjnych.
W tym zadaniu łatwo pomylić zliczanie rekordów z sumowaniem wartości, a to są dwie różne operacje w SQL. Wynik lato 3, zima 4 odpowiadałby raczej zapytaniu z funkcją COUNT, czyli policzeniu, ile wierszy występuje dla każdego sezonu. COUNT nie interesuje się tym, czy w kolumnie liczba_dn jest 10, 5 czy 8, tylko liczy rekordy. Tutaj jednak użyto SUM(liczba_dn), więc baza danych dodaje liczby dni w obrębie każdej grupy. Drugi częsty błąd to potraktowanie GROUP BY tak, jakby tylko porządkowało dane i zostawiało wszystkie wartości osobno, np. lato 10, 5, 5 oraz zima 4, 6, 9, 8. To nie jest poprawny wynik tej kwerendy, bo funkcja agregująca zwraca jedną wartość dla całej grupy, a nie listę elementów. Jeszcze inne nieporozumienie polega na przepisaniu tabeli wejściowej bez żadnej agregacji. Taki wynik byłby możliwy przy prostym SELECT sezon, liczba_dn FROM rezerwacje, ale nie wtedy, gdy używamy GROUP BY razem z SUM. W praktyce GROUP BY służy właśnie do tworzenia zestawień i raportów, a nie do zwykłego wyświetlania danych. Z mojego doświadczenia warto zawsze zadać sobie pytanie: według czego grupuję i jaką operację wykonuję na każdej grupie. Tutaj grupujemy według sezonu i sumujemy liczba_dn, więc końcowy wynik musi mieć po jednym wierszu dla każdego sezonu.

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. Wyślemy 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.