KWALIFIKACJA INF3 - TEST WIEDZY NR 3

PYTANIE NR 26.
Jakie jest prawidłowe użycie klauzuli SQL "HAVING"?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Klauzula HAVING służy do filtrowania wyników po grupowaniu, czyli po zastosowaniu GROUP BY i obliczeniu agregatów (np. COUNT, SUM). W przeciwieństwie do WHERE, które ogranicza wiersze przed agregacją, HAVING ogranicza całe grupy na podstawie warunków, także na wartościach agregowanych.

Pełne wyjaśnienie:

W SQL klauzule w zapytaniu typu SELECT pełnią różne role na różnych etapach przetwarzania danych. Kluczowe jest rozróżnienie filtrowania wierszy od filtrowania grup.

Odpowiedź poprawna: "Filtruje wyniki zapytania po grupowaniu."
Klauzula HAVING działa po utworzeniu grup przez GROUP BY. Jest używana wtedy, gdy chcemy nałożyć warunek na wynik agregacji (np. liczebność grupy, suma wartości, średnia). Przykładowo: wyświetl tylko te kategorie, dla których COUNT rekordów jest większy od określonej wartości.

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

  • "Filtruje wyniki zapytania przed grupowaniem." – to opis klauzuli WHERE. WHERE ogranicza wiersze wejściowe jeszcze zanim zostaną pogrupowane i zanim policzone zostaną agregaty. Nie służy do warunków na agregatach dla całych grup.
  • "Sortuje wyniki zapytania według jednej lub więcej kolumn." – sortowanie realizuje klauzula ORDER BY. HAVING nie wpływa na kolejność wyników, tylko na to, które grupy zostaną w ogóle zwrócone.
  • "Łączy dwie tabele na podstawie wspólnej kolumny." – łączenie tabel realizuje JOIN (np. INNER JOIN, LEFT JOIN). HAVING nie łączy tabel, jedynie filtruje już zbudowany wynik (po ewentualnych JOIN) na poziomie grup.

Wskazówka egzaminacyjna: jeśli warunek dotyczy pojedynczych rekordów (np. data, status, miasto) – zwykle użyjesz WHERE. Jeśli warunek dotyczy agregacji (np. liczba zamówień, suma kwot, średnia ocen) – zwykle potrzebujesz GROUP BY oraz HAVING.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
HAVING to klauzula SQL służąca do filtrowania grup utworzonych przez GROUP BY. Pozwala podać warunek na wyniki agregacji, np. COUNT lub SUM, dzięki czemu zwracane są tylko te grupy, które spełniają kryterium.
WHERE filtruje pojedyncze wiersze przed grupowaniem i agregacją, a HAVING filtruje wynik po GROUP BY, czyli całe grupy. W praktyce: warunki na kolumnach wierszy dajesz w WHERE, a warunki na agregatach (np. COUNT>5) w HAVING.
Używasz HAVING, gdy warunek dotyczy agregacji albo wartości liczonych dla grup (np. liczba rekordów w grupie, suma sprzedaży w kategorii). Jeśli warunek dotyczy pojedynczych rekordów (np. status='opłacone'), właściwsze jest WHERE.
W wielu silnikach SQL HAVING może wystąpić bez GROUP BY, jeśli zapytanie i tak zwraca jeden "zbiorczy" wynik agregacji (jedna grupa). Na egzaminie najczęściej spotyka się jednak HAVING razem z GROUP BY, bo wtedy filtruje się konkretne grupy.
WHERE jest wykonywane przed agregacją, więc nie "widzi" jeszcze wyniku COUNT() dla grupy. Warunek typu COUNT(*) > 10 dotyczy już policzonej wartości i dlatego stosuje się go w HAVING, które działa po etapie grupowania i liczenia agregatów.
Najczęstszy błąd to mylenie HAVING z WHERE i wpisywanie warunków na agregaty do WHERE. Drugi błąd to przekonanie, że HAVING sortuje wynik (to rola ORDER BY). Warto zapamiętać: WHERE=wiersze, HAVING=grupy.
Uproszczona kolejność jest taka: najpierw dobierane/łączone są dane, potem WHERE odrzuca wiersze, następnie GROUP BY tworzy grupy i liczone są agregaty, a na końcu HAVING odrzuca grupy niespełniające warunku. Dzięki temu HAVING może używać agregatów.
Tak. Typowe zastosowanie HAVING polega właśnie na warunkach z agregatami, np. SUM(kwota) > 1000 albo AVG(ocena) > 4. Oznacza to: zwróć tylko te grupy (np. klient, kategoria), dla których wynik agregacji spełnia kryterium.
Zależy od silnika SQL. Część baz pozwala w HAVING używać aliasów z SELECT, ale nie jest to w pełni przenośne między systemami. Na egzaminie bezpieczniej zakładać zapis z pełnym wyrażeniem agregującym w HAVING (np. HAVING COUNT(*) > 5) niż polegać na aliasie.
Przećwicz kilka zapytań raportowych: zliczanie (COUNT), sumowanie (SUM) i średnie (AVG) w podziale na grupy (GROUP BY), a potem ograniczanie wyników warunkiem w HAVING. Dobrą metodą jest porównywanie par: ten sam warunek w WHERE vs w HAVING i obserwacja różnic.
info

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

Według specjalistów z branży: "Klauzula HAVING służy do filtrowania wyników po grupowaniu, czyli po zastosowaniu GROUP BY i obliczeniu agregatów (np. COUNT, SUM)."

Źródła:

  • PostgreSQL Documentation: "SELECT" / "HAVING" clause, https://www.postgresql.org/docs/current/sql-select.html (accessed 2026-02-18)
  • MySQL 8.0 Reference Manual: "HAVING Clause", https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html (accessed 2026-02-18)
  • Microsoft Learn: "GROUP BY clause (Transact-SQL)" (includes HAVING usage), https://learn.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql (accessed 2026-02-18)

Materiały:

  • Dokumentacja wybranego silnika SQL (sekcja SELECT/GROUP BY/HAVING)
  • Ćwiczenia z zapytań agregujących na przykładowej bazie (np. sklep, zamówienia)
  • Materiały o kolejności wykonywania klauzul w zapytaniu SELECT

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego