Получить названия подразделений со средней зарплатой выше 100 000

Используйте LEFT JOIN сотрудников к отделам, GROUP BY и HAVING AVG(salary) > 100000. Но числа в ожидаемом выводе перепутаны: по данным финансовый отдел имеет 112500, а группа без отдела — 130000.

Короткий ответ

Что ответить на собеседовании

Используйте LEFT JOIN сотрудников к отделам, GROUP BY и HAVING AVG(salary) > 100000. Но числа в ожидаемом выводе перепутаны: по данным финансовый отдел имеет 112500, а группа без отдела — 130000.

Подробный разбор

Ответ с пояснениями

Условие

Сформируй SQL‑запрос, который вернёт название каждого отдела, где средняя зарплата сотрудников превышает 100 000, а также вычисленное значение этой средней зарплаты. Если у работников нет привязанного отдела (значение department_id равно NULL или NONE) и их средняя зарплата тоже превышает 100 000, такие записи также должны попасть в результат; вместо названия отдела вывести строку "Без отдела".

Ожидаемый вывод для приведённых примеров данных:

department              avg_salary
Финансовый отдел       130000
Без отдела             112500
IT-отдел               250000

Даны две таблицы — department и employees — со следующими схемами:

CREATE TABLE department (id serial, name varchar not null);
CREATE TABLE employees (id serial, salary int not null, department_id smallint);

Пример содержимого таблиц:

id name
1 Бухгалтерия
2 Юридический отдел
3 IT-отдел
4 Охрана
5 Финансовый отдел
id salary department_id
1 135000 5
2 60000 1
3 30000 4
4 180000 NULL
5 80000 2
6 250000 3
7 35000 4
8 80000 NULL
9 90000 5

Ответ

Используйте LEFT JOIN сотрудников к отделам, GROUP BY и HAVING AVG(salary) > 100000. Но числа в ожидаемом выводе перепутаны: по данным финансовый отдел имеет 112500, а группа без отдела — 130000.

Запрос:

SELECT COALESCE(d.name, 'Без отдела') AS department,
       AVG(e.salary) AS avg_salary
FROM employees AS e
LEFT JOIN department AS d ON d.id = e.department_id
GROUP BY d.id, d.name
HAVING AVG(e.salary) > 100000;

Финансовый отдел: (135000 + 90000)/2 = 112500; без отдела: (180000 + 80000)/2 = 130000; IT — 250000. SQL использует NULL, не NONE. В рабочей схеме нужны уникальный ключ department.id и внешний ключ employees.department_id, иначе возможны дубли соединения или ссылки на отсутствующие отделы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее