65. Найти департаменты с количеством сотрудников больше трёх
Условие задачи:
Даны таблицы department и users.
Необходимо вывести департаменты, в которых работает больше трёх сотрудников.
Для каждого такого департамента вывести:
department_id;название департамента;
количество сотрудников.
Код:
CREATE TABLE department (
department_id BIGINT PRIMARY KEY,
department_name VARCHAR(255)
);
CREATE TABLE users (
user_id BIGINT PRIMARY KEY,
full_name VARCHAR(255),
department_id BIGINT,
CONSTRAINT fk_department
FOREIGN KEY (department_id)
REFERENCES department(department_id)
);
Спойлеры к решению
Подсказки
💡 Соедини сотрудников с департаментами по
💡 Сгруппируй строки по департаменту.
💡 Для подсчёта сотрудников используй
💡 Условие на количество строк после группировки задаётся через
department_id.💡 Сгруппируй строки по департаменту.
💡 Для подсчёта сотрудников используй
COUNT().💡 Условие на количество строк после группировки задаётся через
HAVING, а не WHERE.Решение
SELECT
d.department_id,
d.department_name,
COUNT(u.user_id) AS employee_count
FROM department d
JOIN users u
ON u.department_id = d.department_id
GROUP BY
d.department_id,
d.department_name
HAVING COUNT(u.user_id) > 3;
Сначала сотрудники соединяются со своими департаментами:
JOIN users u
ON u.department_id = d.department_id
После этого строки группируются по департаментам:
GROUP BY
d.department_id,
d.department_name
COUNT(u.user_id) считает сотрудников в каждом департаменте, а:
HAVING COUNT(u.user_id) > 3
оставляет только те департаменты, где работает больше трёх человек.
Обычный JOIN здесь подходит, поскольку департаменты без сотрудников в любом случае не удовлетворяют условию COUNT > 3.