KWALIFIKACJA INF3 - CZERWIEC 2018

PYTANIE NR 18.
Do tabeli pracownicy wpisano rekordy. Co zostanie wyświetlone po uruchomieniu kwerendy SQL SELECT podanej poniżej?

SELECT SUM(pensja) FROM pracownicy WHERE pensja > 4000;

Ilustracja przedstawia tabelę zawierającą dane pracowników, które mogą być używane w kontekście egzaminu zawodowego dla
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Zapytanie używa funkcji agregującej SUM(pensja), więc zwraca jedną wartość: sumę pensji tylko tych pracowników, którzy spełniają warunek WHERE (pensja > 4000).
Wynik nie jest listą pensji ani maksymalną pensją, tylko sumą wyfiltrowanych rekordów.

Pełne wyjaśnienie:

Zapytanie SELECT SUM(pensja) FROM pracownicy WHERE pensja > 4000; składa się z dwóch kluczowych elementów: filtrowania i agregacji.

  • WHERE pensja > 4000 oznacza, że do dalszego przetwarzania brane są tylko te wiersze (rekordy) tabeli pracownicy, w których wartość pola pensja jest większa niż 4000.
  • SUM(pensja) jest funkcją agregującą. Agregacja "zwija" wiele wierszy do jednej wartości liczbowej będącej sumą wskazanej kolumny dla wierszy, które przeszły filtr.

Dlatego poprawna jest odpowiedź mówiąca o jednej wartości 10000 jako sumie pensji pracowników spełniających warunek (w treści odpowiedzi: pracownicy o id=4 oraz id=6). To typowy wzorzec raportowy: najpierw ograniczamy zbiór danych warunkiem, a potem liczymy statystykę dla tego zbioru.

Dlaczego pozostałe odpowiedzi są błędne?

  • Odpowiedź o "sumie wszystkich pensji" pomija działanie klauzuli WHERE. Zapytanie nie sumuje całej tabeli, tylko rekordy z pensją większą niż 4000.
  • Odpowiedź o "najwyższej pensji" miesza pojęcia: maksimum liczy się funkcją MAX(), a nie SUM(). Sam warunek > 4000 nie oznacza "weź największą".
  • Odpowiedź z "dwiema wartościami 4600 i 5400" odpowiadałaby zapytaniu bez SUM, np. SELECT pensja ... WHERE pensja > 4000. Funkcja SUM powoduje, że wynikiem nie jest lista, tylko pojedyncza suma.

Wskazówka egzaminacyjna: gdy widzisz SUM/AVG/COUNT bez GROUP BY, spodziewaj się jednej komórki w wyniku (jedna liczba), a nie wielu wierszy.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
SUM() to funkcja agregująca, która zwraca jedną liczbę: sumę wartości wskazanej kolumny dla zestawu wierszy objętych zapytaniem. Jeśli w zapytaniu jest WHERE, to sumowane są tylko rekordy spełniające warunek.
Funkcje agregujące (SUM, AVG, COUNT, MIN, MAX) "zwijają" wiele wierszy do jednego wyniku. Bez GROUP BY cała przefiltrowana tabela jest traktowana jako jedna grupa, więc wynikiem jest pojedyncza komórka.
WHERE działa jak filtr: do obliczenia SUM(pensja) przechodzą tylko te wiersze, w których kolumna pensja ma wartość większą niż 4000. Rekordy z pensją równą 4000 lub mniejszą są pomijane.
To zależy od DBMS, ale typowo SUM dla braku pasujących wierszy zwraca NULL, a nie 0. Na egzaminie warto pamiętać o tej pułapce i odróżniać "brak danych" od "suma równa zero".
SUM() oblicza sumę wartości z wielu rekordów, a MAX() wybiera największą pojedynczą wartość z kolumny. Warunek WHERE nie zamienia SUM w MAX — nadal liczona jest suma, tylko z przefiltrowanego podzbioru.
GROUP BY stosuje się, gdy chcesz otrzymać wiele sum, np. osobną sumę pensji dla każdego działu. Wtedy zapytanie zwraca wiele wierszy (po jednym na grupę). Bez GROUP BY otrzymujesz jedną sumę dla całego filtrowanego zbioru.
Wtedy nie używasz SUM, tylko wybierasz kolumnę: SELECT pensja FROM pracownicy WHERE pensja > 4000;. Taki wynik może zawierać wiele wierszy (listę pensji), w przeciwieństwie do agregacji.
Wiele osób automatycznie kojarzy SUM z "podsumowaniem tabeli" i pomija warunek WHERE. To błąd nieuwzględnienia ograniczeń w zapytaniu. Na egzaminie zawsze czytaj SQL od WHERE do funkcji agregującej.
Nie. Znak > oznacza "większe niż". Dla "większe lub równe" używa się >=. Ta różnica zmienia zbiór rekordów wliczanych do SUM, więc może całkowicie zmienić wynik.
Sprawdź, czy w SELECT jest funkcja agregująca (SUM/COUNT/AVG/MIN/MAX) i czy jest GROUP BY. Agregacja bez GROUP BY zwykle daje 1 wiersz. GROUP BY daje wiele wierszy (po jednym na grupę).
info

Statystycznie 43% uczniów zna prawidłową odpowiedź. trudne

Źródła:

  • PostgreSQL Documentation: Aggregate Functions (SUM), https://www.postgresql.org/docs/current/functions-aggregate.html - accessed 2026-03-01
  • MySQL 8.0 Reference Manual: SUM() Function, https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_sum - accessed 2026-03-01
  • SQLite Documentation: Core Functions (aggregate functions incl. sum), https://www.sqlite.org/lang_corefunc.html - accessed 2026-03-01

Materiały:

  • Dokumentacja wybranego DBMS (MySQL/PostgreSQL/SQLite): funkcje agregujące
  • Ćwiczenia: zapytania z SUM/AVG/COUNT z warunkami WHERE
  • Materiały o różnicy między GROUP BY a agregacją bez grupowania

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego