Funkcje agregujące w SQL – COUNT, SUM, AVG, MIN, MAX + praktyczne przykłady
Spis treści
- Czym są funkcje agregujące?
- COUNT()
- SUM()
- AVG()
- MIN() i MAX()
- GROUP BY
- HAVING
- COUNT(*) vs COUNT(kolumna)
- NULL i agregacje
- Najczęstsze błędy
- JOIN i agregacje
- Podsumowanie
Czym są funkcje agregujące w SQL?
Funkcja agregująca wykonuje obliczenie na wielu rekordach i zwraca jeden wynik.
Dzięki temu możemy szybko uzyskać odpowiedzi na pytania:
- Ilu jest pracowników?
- Jaka jest średnia pensja?
- Jakie jest najwyższe wynagrodzenie?
- Jaka jest suma sprzedaży?
SELECT COUNT(*)
FROM employees;Najważniejsze funkcje agregujące
| Funkcja | Znaczenie | Przykład |
|---|---|---|
| COUNT() | Liczy rekordy | Liczba pracowników |
| SUM() | Sumuje wartości | Suma wynagrodzeń |
| AVG() | Oblicza średnią | Średnia pensja |
| MIN() | Znajduje minimum | Najniższa pensja |
| MAX() | Znajduje maksimum | Najwyższa pensja |
COUNT() – liczenie rekordów
SELECT COUNT(*) AS liczba_pracownikow
FROM employees;SELECT COUNT(*) AS liczba_pracownikow
FROM employees
WHERE salary > 5000;Klauzula WHERE filtruje dane przed wykonaniem agregacji.
SUM() – sumowanie wartości
SELECT SUM(salary) AS suma_wynagrodzen
FROM employees;SELECT SUM(salary)
FROM employees
WHERE department_id = 50;AVG() – średnia
SELECT AVG(salary) AS srednia_pensja
FROM employees;MIN() i MAX()
SELECT
MIN(salary) AS najnizsza_pensja,
MAX(salary) AS najwyzsza_pensja
FROM employees;Możesz jednocześnie obliczać wiele statystyk:
SELECT
COUNT(*) AS liczba_pracownikow,
AVG(salary) AS srednia_pensja,
MIN(salary) AS minimum,
MAX(salary) AS maksimum,
SUM(salary) AS suma_wynagrodzen
FROM employees;GROUP BY – agregowanie danych
Jeżeli chcesz otrzymać wyniki dla poszczególnych działów, użyj GROUP BY:
SELECT
department_id,
COUNT(*) AS liczba_pracownikow
FROM employees
GROUP BY department_id;Średnia pensja w każdym dziale:
SELECT
department_id,
AVG(salary) AS srednia_pensja
FROM employees
GROUP BY department_id;HAVING – filtrowanie grup
WHERE filtruje rekordy, natomiast HAVING filtruje grupy utworzone przez GROUP BY.
SELECT
department_id,
COUNT(*) AS liczba_pracownikow
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;WHERE → filtruje rekordy
GROUP BY → tworzy grupy
HAVING → filtruje grupy
COUNT(*) a COUNT(kolumna)
SELECT COUNT(*)
FROM employees;SELECT COUNT(commission_pct)
FROM employees;COUNT(*) liczy wszystkie rekordy, natomiast COUNT(kolumna) pomija wartości NULL.
NULL a funkcje agregujące
Funkcje SUM(), AVG(), MIN() i MAX() ignorują wartości NULL.
1000
2000
NULL
3000SUM() zwróci 6000, a AVG() obliczy średnią tylko na podstawie trzech wartości liczbowych.
Najczęstsze błędy
1. Brak GROUP BY
SELECT department_id, COUNT(*)
FROM employees;2. Używanie WHERE zamiast HAVING
HAVING COUNT(*) > 53. Mylenie COUNT(*) z COUNT(kolumna)
Wyniki mogą być różne przez wartości NULL.
4. Traktowanie NULL jak zera
NULL oznacza brak wartości, a nie wartość zero.
JOIN i funkcje agregujące
SELECT
d.department_name,
COUNT(e.employee_id) AS liczba_pracownikow
FROM departments d
LEFT JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_name;To bardzo częsty wzorzec spotykany w raportach biznesowych.
zobacz to na filmie:
Podsumowanie
- COUNT() → liczba rekordów
- SUM() → suma wartości
- AVG() → średnia
- MIN() → minimum
- MAX() → maksimum
Opanowałeś podstawy funkcji agregujących? To dopiero początek. Na szkoleniu SQL Server dla początkujących przećwiczysz to i znacznie więcej na żywych przykładach, z trenerem, który odpowie na Twoje pytania.”



