Postgres. Как получить количество первых дочерних ветвей иерархии?
У меня имеется иерархическое дерево сотрудников. И мне нужно получить количество прямых подчинённых для каждого из сотрудников. То есть, у директора три подчинённых. У руководителя с id'ом 2 - два сотрудника, с id'ом 3 - 1 (у его подчинённого есть ещё два сотрудника, которых считать не нужно). Как это сделать?
Скрипты для создания базы:
CREATE TABLE Employees (
id integer
,parent_id integer
,fullname varchar(50)
,workname varchar(100)
);
INSERT INTO Employees VALUES
(1, NULL, 'Ломов Сергей', 'Директор'),
(2, 1, 'Краснов Андрей', 'Ком. Директор'),
(3, 1, 'Грязнов Михаил', 'Тех. Директор'),
(4, 1, 'Прусов Евгений', 'Директор IT'),
(5, 3, 'Кряжев Александр', 'Руководитель №1'),
(6, 5, 'Носик Андрей', 'Сотрудник №1'),
(7, 5, 'Астахов Олег', 'Сотрудник №2'),
(8, 4, 'Попков Леонид', 'Руководитель №2'),
(9, 8, 'Чумнов Альберт', 'Сотрудник №1'),
(10, 2, 'Серёга 1', 'Сотрудник №222'),
(11, 2, 'Серёга 2', 'Сотрудник №333');
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Ну так объедините таблицы и посчитайте:
SELECT e.id
, COUNT(sub.*) AS sub_count
FROM employees AS e
LEFT JOIN employees AS sub
ON sub.parent_id = e.id
GROUP BY e.id
ORDER BY e.id
;