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.
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.
SELECT COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
WHERE klasa = '3TI';
SELECT MAX(punkty) AS najlepszy, MIN(punkty) AS najslabszy
FROM uczniowie;
SELECT COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
WHERE klasa = '3TI';
SELECT MAX(punkty) AS najlepszy, MIN(punkty) AS najslabszy
FROM uczniowie;
Co liczy COUNT(*)?
Poprawna: b) Gwiazdka liczy każdy wiersz wyniku.
GROUP BY dzieli wynik na grupy według kolumny. Każda grupa daje jeden wiersz wyniku, np. liczbę uczniów w każdej klasie.
SELECT klasa, COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
GROUP BY klasa
HAVING COUNT(*) > 2
ORDER BY srednia DESC;
SELECT klasa, COUNT(*) AS ilu, AVG(punkty) AS srednia
FROM uczniowie
GROUP BY klasa
HAVING COUNT(*) > 2
ORDER BY srednia DESC;
Co robi GROUP BY?
Poprawna: c) GROUP BY tworzy grupy według kolumny.
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) .
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);
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);
Czym jest podzapytanie?
Poprawna: b) Podzapytanie działa wewnątrz innego zapytania.