W budowie
COUNT, SUM, AVG, MIN, MAX, grupowanie GROUP BY i raporty HTML

Część 15 · SQL: funkcje agregujące, grupowanie i raporty — kurs PHP INF.03

Część 15 kursu PHP pod kątem INF.03: SQL: funkcje agregujące (COUNT, SUM, AVG, MIN, MAX), grupowanie (GROUP BY), filtrowanie grup (HAVING) oraz tworzenie raportów tabelarycznych.

  • 45 min
  • 16 slajdów
  • Notatki nauczyciela: N
  • Strona modułu: otwórz
Plan · 45 min

Co dziś robimy

  1. 12 minFunkcje agregujące COUNT(*) liczy wszystkie wiersze, a COUNT(kolumna) tylko te, w których kolumna nie jest…
  2. 12 minGrupowanie i HAVING W SELECT mogą wystąpić kolumny z GROUP BY oraz funkcje agregujące.
  3. 12 minRaporty i podzapytania Raport zwykle łączy grupowanie, sortowanie i limit.
  4. 4 minĆwiczenia 16 zadań w module — wybierz 3–4 na lekcję
  5. 5 minPodsumowanie bilet wyjściowy i zadanie domowe
Atom 1 z 4 · ~12 min

Funkcje agregujące

COUNT() liczy wiersze, SUM() sumuje wartości, AVG() liczy średnią, a MIN() i MAX() pokazują skrajne wartości. Wszystkie zwracają jeden wynik dla całej grupy.

  • COUNT(*) liczy wszystkie wiersze, a COUNT(kolumna) tylko te, w których kolumna nie jest pusta.
  • To ważna różnica przy danych opcjonalnych.
  • Funkcje agregujące można łączyć z warunkiem WHERE — wtedy liczą tylko pasujące wiersze.
  • Nie wolno ich używać w WHERE ; do filtrowania grup służy HAVING .
Kod · atom 1 · ~3 min

Jak to wygląda w kodzie

SELECT COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
WHERE klasa = '3TI';

SELECT MAX(punkty) AS najlepszy, MIN(punkty) AS najslabszy
FROM uczniowie;
Przykład na żywo · atom 1 · ~3 min

Uruchom i pokaż

SELECT COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
WHERE klasa = '3TI';

SELECT MAX(punkty) AS najlepszy, MIN(punkty) AS najslabszy
FROM uczniowie;
Sprawdzenie · atom 1 · ~2 min

Pytanie do klasy

Co liczy COUNT(*)?

Atom 2 z 4 · ~12 min

Grupowanie i HAVING

GROUP BY dzieli wynik na grupy według kolumny. Każda grupa daje jeden wiersz wyniku, np. liczbę uczniów w każdej klasie.

  • W SELECT mogą wystąpić kolumny z GROUP BY oraz funkcje agregujące.
  • Wypisanie innej kolumny bez agregacji jest błędem logicznym.
  • HAVING filtruje już policzone grupy, np.
  • tylko klasy z więcej niż pięcioma uczniami.
Kod · atom 2 · ~3 min

Jak to wygląda w kodzie

SELECT klasa, COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
GROUP BY klasa
HAVING COUNT(*) > 2
ORDER BY srednia DESC;
Przykład na żywo · atom 2 · ~3 min

Uruchom i pokaż

SELECT klasa, COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
GROUP BY klasa
HAVING COUNT(*) > 2
ORDER BY srednia DESC;
Sprawdzenie · atom 2 · ~2 min

Pytanie do klasy

Co robi GROUP BY?

Atom 3 z 4 · ~12 min

Raporty i podzapytania

Podzapytanie to zapytanie w nawiasie wewnątrz innego zapytania. Może zwrócić jedną wartość, np. średnią, i posłużyć do porównania: WHERE punkty > (SELECT AVG(punkty) FROM uczniowie) .

  • Raport zwykle łączy grupowanie, sortowanie i limit.
  • Warto nadawać wynikom aliasy przez AS , bo wtedy nagłówki tabeli są czytelne dla użytkownika.
  • W większych raportach używamy JOIN razem z agregacją: łączymy tabele i liczymy statystyki dla grup.
  • To najczęstszy wzorzec w zadaniach maturalnych i egzaminacyjnych.
Kod · atom 3 · ~3 min

Jak to wygląda w kodzie

SELECT k.nazwa, COUNT(u.id) AS ilu
FROM klasy k
LEFT JOIN uczniowie u ON u.klasa_id = k.id
GROUP BY k.nazwa
ORDER BY ilu DESC;

SELECT imie FROM uczniowie
WHERE punkty > (SELECT AVG(punkty) FROM uczniowie);
Przykład na żywo · atom 3 · ~3 min

Uruchom i pokaż

SELECT k.nazwa, COUNT(u.id) AS ilu
FROM klasy k
LEFT JOIN uczniowie u ON u.klasa_id = k.id
GROUP BY k.nazwa
ORDER BY ilu DESC;

SELECT imie FROM uczniowie
WHERE punkty > (SELECT AVG(punkty) FROM uczniowie);
Sprawdzenie · atom 3 · ~2 min

Pytanie do klasy

Czym jest podzapytanie?

Zamknięcie · ~3 min

Co zabrać z lekcji

  • COUNT(*) liczy wszystkie wiersze, a COUNT(kolumna) tylko te, w których kolumna nie jest pusta.
  • W SELECT mogą wystąpić kolumny z GROUP BY oraz funkcje agregujące.
  • Raport zwykle łączy grupowanie, sortowanie i limit.
  • Ćwiczenia
Bilet wyjściowy: Co daje LEFT JOIN w raporcie?
Odpowiedź: a) Także puste grupy
Hyżyk· Część 15 · SQL: funkcje agregujące, grupowanie i raporty — k moduł 1 / 1