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

54. Размер команды руководителя по всей иерархии

Сложная

В employees — сотрудники территориального банка: председатель, управляющие отделениями, менеджеры, стажёры. У каждого, кроме верхних руководителей, есть manager_id. Верхних руководителей может быть несколько.

Для каждого сотрудника посчитайте team_size — число всех подчинённых: прямых, их подчинённых и так далее до самого низа. У рядового сотрудника 0.

Верните emp_id, full_name, team_size. Порядок — по team_size по убыванию, затем по emp_id.

В работе: Оргструктура в HR-аналитике: нагрузка на руководителей и расчёт премиального фонда по подразделению.

Таблицы

employees — сотрудники, связь «руководитель — подчинённый», циклов нет

КолонкаТипЧто значит
emp_idintключ
full_nametextФИО
positiontextдолжность
manager_idintруководитель, NULL у верхних

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

employees · 6 строк

emp_idfull_namepositionmanager_id
1Наталья ГромовапредседательNULL
2Сергей Ушаковуправляющий отделением1
3Ирина Беловауправляющий отделением1
4Павел Дьяковменеджер2
5Ольга Сорокинаменеджер2
6Денис Ахмедовстажёр4

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

emp_idfull_nameteam_size
1Наталья Громова5
2Сергей Ушаков3
4Павел Дьяков1
3Ирина Белова0
5Ольга Сорокина0
6Денис Ахмедов0
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
emp_id, full_name, team_size
рекурсивный CTELEFT JOIN

Источник: на данных Сбера, по мотивам открытой подборки вопросов. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.