← Усі задачі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
);Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (3)
Кожен тест заповнює таблиці своїми даними й порівнює результат вашого запиту з очікуваним: ті самі колонки (назви й порядок) і ті самі рядки в тому самому порядку, тож ORDER BY важливий. Запит виконується в справжньому PostgreSQL просто в браузері; перший запуск завантажує його (близько 5 МБ).
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);
-- 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);
-- nobody reports to employee 1 INSERT INTO employees VALUES (1, 'Solo', NULL), (2, 'Other', NULL);