Ein Organigramm durchlaufen
Eine Mitarbeiter-Vorgesetzten-Hierarchie beliebig tief durchlaufen
Ein Organigramm durchlaufen ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Frage zum Organigramm
"Bei einer Tabelle employees mit id, name und manager_id: Listen Sie alle Personen unter einem bestimmten Manager bis zu beliebiger Tiefe auf." Das ist eine der häufigsten Interviewaufgaben zu rekursiven CTEs.
Die Tabelle ist selbstreferenzierend: manager_id verweist auf die id einer anderen Zeile zurück. In dieser Lektion durchlaufen Sie die Struktur sowohl nach unten (Unterstellte) als auch nach oben (Vorgesetztenkette).
Die Beispieltabelle
Stellen Sie sich diese Daten vor. Für den CEO ist der Manager NULL. Alle anderen berichten in der Hierarchie nach oben.
- 1 Ada (manager NULL)
- 2 Ben (manager 1)
- 3 Cleo (manager 1)
- 4 Dan (manager 2)
- 5 Eve (manager 4)
Die Hierarchie verläuft also: Ada → Ben → Dan → Eve. Behalten Sie dies im Kopf, während wir sie durchlaufen.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT REFERENCES employees(id)
);Von einem Manager aus nach unten laufen
Um alle Unterstellten eines ausgewählten Managers aufzulisten, wählt der Ankerteil diesen Manager (oder seine direkten Unterstellten) aus, und der rekursive Teil folgt manager_id nach unten.
Hier starten wir bei Ben (id 2) und sammeln alle Personen unter ihm.
WITH RECURSIVE subtree AS (
SELECT id, name, manager_id, 1 AS depth
FROM employees WHERE id = 2
UNION ALL
SELECT e.id, e.name, e.manager_id, s.depth + 1
FROM employees e
JOIN subtree s ON e.manager_id = s.id
)
SELECT name, depth FROM subtree ORDER BY depth;Die Ausgabe lesen
Die obige Abfrage liefert Ben mit depth 1, Dan mit depth 2 und Eve mit depth 3. Der Ankerteil legte Ben an; die erste Iteration fand Dan (dessen manager Ben ist); die zweite Iteration fand Eve (deren manager Dan ist); die dritte Iteration fand niemanden, daher endete die Rekursion.
Wenn der Interviewer fragt: "Wie viele Ebenen unterhalb von Ben befindet sich Eve?", beantwortet die Spalte depth die Frage direkt: 3 minus 1 ergibt 2 Ebenen.
Nach oben zum CEO laufen
Die umgekehrte Frage ist genauso häufig: "Zeigen Sie Eves vollständige Vorgesetztenkette bis zum CEO." Kehren Sie die Join-Richtung um — der rekursive Teil folgt nun der manager_id der aktuellen Zeile nach oben zum übergeordneten Eintrag.
WITH RECURSIVE chain AS (
SELECT id, name, manager_id, 1 AS lvl
FROM employees WHERE id = 5
UNION ALL
SELECT e.id, e.name, e.manager_id, c.lvl + 1
FROM employees e
JOIN chain c ON e.id = c.manager_id
)
SELECT name, lvl FROM chain ORDER BY lvl;Nach unten vs. nach oben: Der Join wechselt
Der einzige strukturelle Unterschied zwischen dem Durchlaufen nach unten und nach oben ist die Join-Bedingung:
- Nach unten (Unterstellte finden):
e.manager_id = cte.id— Mitarbeiter auswählen, deren Manager eine Zeile ist, die wir bereits haben. - Nach oben (Manager finden):
e.id = cte.manager_id— den Mitarbeiter auswählen, dessen ID der Manager unserer aktuellen Zeile ist.
Diese Umkehrung klar formulieren zu können, beeindruckt Interviewer.
Einen eingerückten Baum erstellen
Eine ausgefeilte Antwort formatiert die Ausgabe mithilfe von depth als eingerückten Baum, indem sie Leerzeichen wiederholt. Das zeigt, dass Sie hierarchische Ergebnisse nicht nur berechnen, sondern auch präsentieren können.
WITH RECURSIVE org AS (
SELECT id, name, 1 AS depth
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, o.depth + 1
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT REPEAT(' ', depth - 1) || name AS tree
FROM org
ORDER BY depth;Den Pfad ansammeln
Um den vollständigen Weg vom CEO zu jeder Person anzuzeigen, führen Sie eine path-Zeichenkette mit. Das ist dieselbe Technik aus der vorherigen Lektion, angewendet auf das Organigramm.
WITH RECURSIVE org AS (
SELECT id, name, CAST(name AS VARCHAR(500)) AS path
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, o.path || ' / ' || e.name
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT name, path FROM org ORDER BY path;Unterstellte pro Manager zählen
Eine häufige Rückfrage lautet: "Wie viele Personen unterstehen jedem Manager direkt oder indirekt?" Verwenden Sie den rekursiven Teilbaum für jeden Manager und aggregieren Sie anschließend. Ein gängiges Muster besteht darin, die Rekursion einmal pro Wurzel auszuführen und den Start-Manager mit GROUP BY zu gruppieren.
Hier zählen wir alle indirekt Unterstellten unter Ada (dem CEO), indem wir den gesamten Baum durchlaufen und die Zeilen unterhalb der Wurzel zählen.
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 0 AS depth
FROM employees WHERE id = 1
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT COUNT(*) - 1 AS total_reports FROM org;Häufige Fehler
Achten Sie auf diese Fallen, die Interviewer gern einbauen:
- Falsche Join-Richtung — die Verwendung von
e.manager_id = cte.id, obwohl Sie nach oben gehen wollten, liefert die falsche Ergebnismenge. - Filter im Ankerteil vergessen — lassen Sie
WHERE id = Xweg, legen Sie jede Zeile als Startzeile an und geben dadurch den gesamten Wald zurück. - Fehler um eins bei depth — entscheiden Sie, ob die Startzeile depth 0 oder 1 hat, und bleiben Sie konsistent.
Warum nicht einfach ein Self-Join?
Ein Self-Join kann eine feste Anzahl von Ebenen abrufen: ein Join für direkte Unterstellte, zwei für Mitarbeiter der zweiten Ebene und so weiter. Sie müssen die Tiefe jedoch im Voraus kennen und für jede Ebene einen Join schreiben.
Eine rekursive CTE verarbeitet in einer Abfrage eine beliebige, unbekannte Tiefe. Wenn ein Interviewer sagt: "Die Hierarchie kann beliebig viele Ebenen haben", schließt das einfache Self-Joins aus und signalisiert, dass Rekursion gefragt ist.
Kurzer Test
Stellen Sie sicher, dass Sie die Durchlaufrichtung umkehren können.
Zusammenfassung
Das Durchlaufen eines Organigramms ist die rekursive Grundstruktur, die auf eine Tabelle mit Selbstreferenz angewendet wird:
- Abwärts: Einen Manager als Ausgangspunkt wählen und
e.manager_id = cte.idverknüpfen. - Aufwärts: Einen Mitarbeiter als Ausgangspunkt wählen und
e.id = cte.manager_idverknüpfen. depthfür die Einrückung undpathfür die vollständige Kette mitführen.- Die Rekursion verarbeitet jede unbekannte Tiefe, was mit einem Self-Join nicht möglich ist.
Als Nächstes: Rekursion zum Erzeugen von Zahlen- und Datumsreihen verwenden.
Häufig gestellte Fragen
Ist die Lektion „Ein Organigramm durchlaufen“ kostenlos?
Ja — der vollständige Text von „Ein Organigramm durchlaufen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Ein Organigramm durchlaufen“?
Eine Mitarbeiter-Vorgesetzten-Hierarchie beliebig tief durchlaufen Du übst SQL Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. SQL Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Ein Organigramm durchlaufen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede SQL Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Anker- und rekursive Elemente
- Ein Organigramm durchlaufen
- Zahlen- und Datumsreihen erzeugen
- Unendliche Rekursion vermeiden