Используйте JOIN, GROUP BY по идентификатору отдела и HAVING COUNT(*) > 2. Для приведённых данных будет выбрано только D1.
Отбор отделов с числом сотрудников более двух
Используйте JOIN, GROUP BY по идентификатору отдела и HAVING COUNT(*) > 2. Для приведённых данных будет выбрано только D1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо вывести названия всех отделов, где количество работников превышает два.
CREATE TABLE department (
id INT,
name VARCHAR(100)
);
CREATE TABLE employee (
id INT,
department_id INT,
chief_id INT,
name VARCHAR(100),
salary INT
);
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);
Ответ
Используйте JOIN, GROUP BY по идентификатору отдела и 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;
В первом отделе работают John, Misha и Stepan Chief, во втором — Eugen и Tolya, в третьем сотрудников нет. chief_id не участвует в условии подсчёта.
HAVING фильтрует агрегированные группы, тогда как WHERE применялся бы к строкам до подсчёта. В исходном блоке указан маркер Python, но содержимое является SQL. Для переносимости строковые литералы при вставке следует записывать в одинарных кавычках, например 'D1'.