← Wszystkie zadaniaSQL · Senior

Wszyscy podwładni przez rekurencyjne CTE

Wypisz wszystkich bezpośrednich i pośrednich podwładnych pracownika z id = 1: kolumny id, name i depth (1 dla bezpośredniego podwładnego, 2 dla podwładnego podwładnego i tak dalej). Sortowanie według depth, potem id. Głębokość hierarchii nie jest znana z góry.

Tabele

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

Testy (3)

Każdy test wypełnia tabele własnymi danymi i porównuje wynik twojego zapytania z oczekiwanym: te same kolumny (nazwy i kolejność) i te same wiersze w tej samej kolejności, więc ORDER BY ma znaczenie. Zapytanie działa w prawdziwym PostgreSQL prosto w przeglądarce; pierwsze uruchomienie go pobiera (około 5 MB).

  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);