Zadanie 33.

SELECT department_id, COUNT(*) AS liczba_pracownikow
FROM employees
GROUP BY department_id
ORDER BY department_id;

 

Zadanie 34.

SELECT job_id, AVG(salary) AS srednia_placa
FROM employees
GROUP BY job_id;

 

Zadanie 35.

SELECT department_id,
       MIN(salary) AS min_placa,
       MAX(salary) AS max_placa
FROM employees
GROUP BY department_id;

 

Zadanie 36.

SELECT department_id, AVG(salary) AS srednia
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 8000;

 

Zadanie 37.

SELECT department_id, COUNT(*) AS liczba
FROM employees
WHERE department_id IN (50, 60, 80)
GROUP BY department_id;

 

Zadanie 38.

SELECT manager_id,
       SUM(salary) AS suma_wynagrodzen,
       COUNT(*) AS liczba_podwladnych
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
ORDER BY suma_wynagrodzen DESC;

 

📝 Omówienie

GROUP BY agreguje wiersze według wskazanych kolumn. Funkcje agregujące: COUNT, SUM, AVG, MIN, MAX. WHERE filtruje wiersze PRZED grupowaniem, a HAVING filtruje wyniki PO grupowaniu – to kluczowa różnica. W klauzuli SELECT mogą pojawić się tylko kolumny z GROUP BY lub opakowane w funkcję agregującą.