Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.
Отделы, где работает более двух сотрудников
Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Составьте SQL‑запрос, который выводит названия отделов, в которых число сотрудников превышает два.
CREATE TABLE department
(id int(11), name varchar(100))
;
CREATE TABLE employee
(id int(11), department_id int(11), chief_id int(11), name varchar(100), salary int(11))
;
INSERT INTO department
(id, name)
VALUES
(1, "D1"),
(2, "D2"),
(3, "D3")
;
INSERT INTO employee
(id, department_id, chief_id, name, salary)
VALUES
(1, 1, 5, "John", 100),
(2, 1, 5, "Misha", 600),
(3, 2, 5, "Eugen", 300),
(4, 2, 5, "Tolya", 400),
(5, 1, NULL, "Stepan Chief", 500);
Ответ
Соедините отделы с сотрудниками, сгруппируйте по отделу и примените HAVING COUNT(*) > 2. В примере результат — D1.
SELECT d.name
FROM department AS d
JOIN employee AS e ON e.department_id = d.id
GROUP BY d.id, d.name
HAVING COUNT(*) > 2;
В D1 находятся John, Misha и Stepan Chief — три сотрудника. В D2 два сотрудника, а в D3 нет ни одного, поэтому они исключаются. Поле chief_id здесь не влияет на подсчёт: руководитель тоже учитывается как сотрудник своей строки.
Группировка включает идентификатор, чтобы разные отделы с одинаковым названием не сливались. HAVING используется потому, что условие проверяет агрегат уже сформированной группы.