Войти Регистрация
Data base

225. Малые отделы: сотрудники и их руководители

Средняя

departments — отделы, employees — сотрудники с отделом dept_id и непосредственным руководителем manager_id. У генерального директора руководителя нет, manager_id IS NULL. Руководитель может сидеть в другом отделе.

Возьмите отделы, где работает не больше 3 человек, в том числе отделы без сотрудников. Для каждого сотрудника такого отдела верните dept_name, employee — его имя и manager — имя руководителя.

Пустой отдел даёт одну строку с NULL в employee и manager. Порядок — по dept_id, внутри отдела по emp_id.

В работе: Проверка оргструктуры перед реорганизацией: какие отделы слишком малы и кому они подчиняются.

Таблицы

departments — отдел

КолонкаТипЧто значит
dept_idintключ
nametextназвание

employees — сотрудник

КолонкаТипЧто значит
emp_idintключ
full_nametextимя
dept_idintотдел
manager_idintруководитель или NULL

Пример: данные

departments · 3 строки

dept_idname
1Склад Хоругвино
2Аналитика
3Юристы

employees · 6 строк

emp_idfull_namedept_idmanager_id
1Королёва Дарья2NULL
2Петров Илья21
3Сафина Лилия21
4Зуев Марк21
5Орлов Семён11
6Ким Вера15

Ожидаемый ответ

dept_nameemployeemanager
Склад ХоругвиноОрлов СемёнКоролёва Дарья
Склад ХоругвиноКим ВераОрлов Семён
ЮристыNULLNULL
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
dept_name, employee, manager
LEFT JOINJOINGROUP BYHAVINGNULL

Источник: тестовое аналитика данных (Middle) в Ozon, сборник No Data No Growth. Условие пересказано своими словами.