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
;
→ Ссылка