← Усі задачіSQL · Senior

Усі підлеглі через рекурсивний CTE

Виведіть усіх прямих і непрямих підлеглих співробітника з id = 1: колонки id, name і depth (1 - прямий підлеглий, 2 - підлеглий підлеглого і так далі). Сортування за depth, потім за id. Глибина ієрархії заздалегідь невідома.

Таблиці

CREATE TABLE employees (
  id         int PRIMARY KEY,
  name       text NOT NULL,
  manager_id int REFERENCES employees (id)  -- NULL for the CEO
);

Тести (3)

Кожен тест заповнює таблиці своїми даними й порівнює результат вашого запиту з очікуваним: ті самі колонки (назви й порядок) і ті самі рядки в тому самому порядку, тож ORDER BY важливий. Запит виконується в справжньому PostgreSQL просто в браузері; перший запуск завантажує його (близько 5 МБ).

  1. INSERT INTO employees VALUES
      (1, 'CEO', NULL),
      (2, 'CTO', 1), (3, 'CFO', 1),
      (4, 'Dev lead', 2), (5, 'Accountant', 3),
      (6, 'Developer', 4), (7, 'Intern', 6);
  2. -- another branch of the company is not included
    INSERT INTO employees VALUES
      (1, 'Head of A', NULL), (9, 'Head of B', NULL),
      (2, 'A1', 1), (3, 'B1', 9), (4, 'A2', 2);
  3. -- nobody reports to employee 1
    INSERT INTO employees VALUES (1, 'Solo', NULL), (2, 'Other', NULL);