KWALIFIKACJA INF3 - CZERWIEC 2022

PYTANIE NR 18.
Tabela góry, której fragment przedstawiono, zawiera polskie pasma górskie wraz z ich szczytami. Wskaż kwerendę liczącą dla każdego pasma górskiego średnią wysokość jego szczytów.
Ilustracja przedstawia fragment tabeli z danymi dotyczącymi polskich pasm górskich oraz ich szczytów.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawna kwerenda musi zwrócić po jednym wierszu dla każdego pasma oraz obliczyć średnią z kolumny wysokosc. Zapewnia to funkcja AVG(wysokosc) użyta razem z GROUP BY pasmo.
Pozostałe zapytania używają złej funkcji (SUM/COUNT) lub nie grupują danych, przez co wynik nie spełnia warunku zadania.

Pełne wyjaśnienie:

Aby policzyć średnią wysokość szczytów dla każdego pasma, zapytanie musi spełnić dwa warunki jednocześnie:

  • użyć funkcji agregującej wyliczającej średnią, czyli AVG(wysokosc),
  • zgrupować rekordy według pasma, czyli zastosować GROUP BY pasmo, aby powstała osobna "grupa wierszy" dla każdego pasma.

Zapytanie SELECT pasmo, AVG(wysokosc) FROM gory GROUP BY pasmo; zwraca więc wynik w postaci wielu wierszy: każdy wiersz to jedno pasmo oraz policzona dla niego średnia z wartości w kolumnie wysokosc.

Dlaczego pozostałe propozycje są niepoprawne?

  • LIMIT pasmo nie służy do grupowania. LIMIT ogranicza liczbę zwracanych wierszy (zwykle o stałą liczbę), a nie tworzy wyników "dla każdej kategorii". Dodatkowo użycie LIMIT z nazwą kolumny jest w typowych dialektach SQL błędne składniowo.
  • SUM(wysokosc) liczy sumę wysokości, a nie średnią. Nawet jeśli jest poprawnie połączone z GROUP BY, odpowiada na inne pytanie (łączna wysokość, nie przeciętna).
  • COUNT(wysokosc) zlicza wartości (rekordy z niepustą wysokością). ORDER BY jedynie sortuje wynik; bez GROUP BY nie uzyskamy osobnych wartości dla każdego pasma, a sama funkcja COUNT nie oblicza średniej.

Wskazówka egzaminacyjna: gdy w treści pojawia się "dla każdego …" i jednocześnie funkcja agregująca (AVG/SUM/COUNT), prawie zawsze potrzebujesz GROUP BY po kolumnie opisującej tę "kategorię".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
AVG oblicza średnią arytmetyczną wartości w wybranej kolumnie (np. wysokości). Gdy użyjesz jej razem z GROUP BY, średnia liczona jest osobno dla każdej grupy rekordów, np. osobno dla każdego pasma górskiego.
Bez GROUP BY funkcja AVG policzy jedną średnią dla całej tabeli (albo zapytanie będzie niepoprawne, gdy jednocześnie wybierasz kolumnę nieagregowaną). GROUP BY dzieli wiersze na grupy (tu: pasma), a AVG liczy średnią w każdej grupie.
Zwykle chodzi o zapytanie SQL, które używa funkcji agregującej (najczęściej AVG) i zwraca wartość wyliczoną z danych liczbowych. Często dochodzi też GROUP BY, jeśli wynik ma być policzony osobno dla kategorii (np. dla każdego pasma).
SUM zwraca sumę wartości (dodaje wszystkie liczby), a AVG zwraca średnią (suma podzielona przez liczbę elementów). W raportach "przeciętna wartość" to AVG, a "łączna wartość" to SUM.
COUNT zlicza rekordy lub niepuste wartości w kolumnie (ile jest wierszy/elementów), a AVG oblicza średnią z liczb. Częsty błąd to wybór COUNT, bo "też coś liczy", ale nie odpowiada na pytanie o średnią.
Nie. ORDER BY służy do sortowania wyników, a GROUP BY do grupowania rekordów i liczenia agregatów w grupach. Możesz użyć obu naraz, np. najpierw policzyć średnie po pasmach (GROUP BY), a potem posortować pasma po średniej (ORDER BY).
LIMIT ogranicza liczbę zwróconych wierszy (np. pokaż tylko 10 wyników). Nie tworzy grup i nie liczy osobnych średnich "dla każdej kategorii". W zadaniach o średniej dla każdej grupy kluczowe są AVG oraz GROUP BY.
Szukaj zwrotów typu: "dla każdego …", "w podziale na …", "dla każdej kategorii …". Jeśli dodatkowo pojawia się średnia/suma/liczba, to najczęściej oznacza to funkcję agregującą + GROUP BY po kolumnie, która jest tą kategorią.
W typowym SQL nie jest to poprawne logicznie: jeśli zwracasz kolumnę nieagregowaną (np. pasmo) i jednocześnie agregat (AVG), musisz określić, jak agregować względem tej kolumny, czyli użyć GROUP BY. W przeciwnym razie wynik byłby niejednoznaczny.
Najczęściej: pomylenie AVG z SUM lub COUNT, brak GROUP BY mimo "dla każdego …", użycie ORDER BY zamiast GROUP BY oraz próba ograniczania wyniku LIMIT zamiast poprawnego grupowania. Pomaga reguła: agregat + kategoria = GROUP BY.
info

To pytanie poprawnie rozwiązuje 66% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że poprawna kwerenda musi zwrócić po jednym wierszu dla każdego pasma oraz obliczyć średnią z kolumny wysokosc.

Źródła:

  • SQLite Documentation: Aggregate Functions (AVG, SUM, COUNT) — https://www.sqlite.org/lang_aggfunc.html — dostęp: 2026-03-01
  • MySQL 8.0 Reference Manual: GROUP BY Modifiers and usage of GROUP BY — https://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html — dostęp: 2026-03-01
  • PostgreSQL Documentation: Aggregate Functions (AVG, SUM, COUNT) — https://www.postgresql.org/docs/current/functions-aggregate.html — dostęp: 2026-03-01

Materiały:

  • Dokumentacja funkcji agregujących dla używanego silnika bazy danych (np. SQLite/MySQL/PostgreSQL)
  • Ćwiczenia z zapytań agregujących: AVG/SUM/COUNT/MIN/MAX + GROUP BY
  • Zadania praktyczne: raporty i statystyki w bazach danych dla aplikacji internetowych

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego