Een organigram doorlopen
Een medewerker-managerhiërarchie op elke diepte doorlopen
Een organigram doorlopen is een gratis Voorbereiding op SQL-sollicitatiegesprekken-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Voorbereiding op SQL-sollicitatiegesprekken. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
De vraag over het organigram
"Gegeven een tabel employees met id, name en manager_id: vermeld iedereen onder een bepaalde manager, tot op elke diepte." Dit is een van de meest voorkomende sollicitatievragen over recursieve CTE's.
De tabel is zelfverwijzend: manager_id verwijst terug naar de id van een andere rij. In deze les doorloop je de structuur zowel naar beneden (ondergeschikten) als naar boven (de hiërarchische lijn).
De voorbeeldtabel
Stel je deze gegevens voor. De CEO heeft geen manager en gebruikt NULL. Iedereen anders rapporteert aan iemand hoger in de keten.
- 1 Ada (manager NULL)
- 2 Ben (manager 1)
- 3 Cleo (manager 1)
- 4 Dan (manager 2)
- 5 Eve (manager 4)
Dus de diepte is: Ada → Ben → Dan → Eve. Houd dit in gedachten terwijl we de structuur doorlopen.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT REFERENCES employees(id)
);Naar beneden lopen vanaf een manager
Als je alle ondergeschikten onder een gekozen manager wilt vermelden, selecteert het anker die manager (of diens directe ondergeschikten) en volgt het recursieve deel manager_id naar beneden.
Hier beginnen we bij Ben (id 2) en verzamelen we iedereen onder hem.
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;De uitvoer lezen
De query hierboven levert Ben op diepte 1, Dan op diepte 2 en Eve op diepte 3. Het anker startte met Ben; de eerste iteratie vond Dan (wiens manager Ben is); de tweede iteratie vond Eve (wiens manager Dan is); de derde iteratie vond niemand, dus stopte de recursie.
Als de interviewer vraagt "hoeveel niveaus onder Ben bevindt Eve zich?", beantwoordt de kolom depth dat direct: 3 min 1 is 2 niveaus.
Naar boven lopen tot aan de CEO
De omgekeerde vraag komt net zo vaak voor: "Laat de volledige hiërarchische lijn van Eve tot aan de CEO zien." Keer de koppelingsrichting om — het recursieve deel volgt nu de manager_id van de huidige rij naar boven, naar de bovenliggende rij.
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;Naar beneden versus naar boven: de koppeling draait om
Het enige structurele verschil tussen naar beneden en naar boven lopen is de koppelingsvoorwaarde:
- Naar beneden (ondergeschikten vinden):
e.manager_id = cte.id— zoek werknemers van wie de manager een rij is die we al hebben. - Naar boven (managers vinden):
e.id = cte.manager_id— zoek de werknemer waarvan de id de manager van onze huidige rij is.
Als je deze omkering helder kunt uitleggen, maak je indruk op interviewers.
Een ingesprongen boom opbouwen
Een goed uitgewerkt antwoord presenteert de uitvoer als een ingesprongen boom door depth te gebruiken om spaties te herhalen. Zo laat je zien dat je hiërarchieresultaten niet alleen kunt berekenen, maar ook kunt presenteren.
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;Het pad opbouwen
Als je de volledige route van de CEO naar iedere persoon wilt tonen, neem je een tekenreeks voor path mee. Dit is dezelfde techniek als in de vorige les, nu toegepast op het organigram.
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;Ondergeschikten per manager tellen
Een veelgestelde vervolgvraag is: "Hoeveel mensen rapporteren direct of indirect aan elke manager?" Gebruik de recursieve deelboom per manager en aggregeer daarna. Een veelgebruikt patroon is om de recursie één keer per startpunt uit te voeren en de startmanager te groeperen met GROUP BY.
Hier tellen we alle indirecte ondergeschikten onder Ada (de CEO) door de hele boom te doorlopen en de rijen onder de basis te tellen.
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;Veelgemaakte fouten
Let op deze valkuilen die interviewers inbouwen:
- Verkeerde koppelingsrichting — als je
e.manager_id = cte.idgebruikt terwijl je naar boven wilde gaan, krijg je de verkeerde verzameling. - Het ankerfilter vergeten — laat
WHERE id = Xweg en je gebruikt elke rij als startpunt, waardoor je het hele bos terugkrijgt. - Een fout van één in de diepte — bepaal of het startpunt diepte 0 of 1 heeft en wees daar consequent in.
Waarom niet gewoon zelfkoppelen?
Een zelfkoppeling kan een vast aantal niveaus ophalen: één koppeling voor directe ondergeschikten, twee voor ondergeschikten van het tweede niveau, enzovoort. Maar je moet de diepte vooraf kennen en voor elk niveau een koppeling schrijven.
Een recursieve CTE verwerkt in één query een willekeurig, onbekend aantal niveaus. Wanneer een interviewer zegt dat "de hiërarchie uit elk aantal niveaus kan bestaan", vallen gewone zelfkoppelingen af en wijst dat op recursie.
Snelle controle
Zorg dat je de looprichting kunt omkeren.
Samenvatting
Het doorlopen van een organisatieschema is het recursieve skelet dat je toepast op een tabel die naar zichzelf verwijst:
- Omlaag: begin met een manager en koppel met
e.manager_id = cte.id. - Omhoog: begin met een werknemer en koppel met
e.id = cte.manager_id. - Gebruik
depthvoor inspringing enpathvoor de volledige keten. - Recursie werkt voor elke onbekende diepte, terwijl een zelfkoppeling dat niet kan.
Volgende: recursie gebruiken om reeksen getallen en datums te genereren.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Een organigram doorlopen” gratis?
Ja — de volledige tekst van “Een organigram doorlopen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Voorbereiding op SQL-sollicitatiegesprekken wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Wat leer ik in “Een organigram doorlopen”?
Een medewerker-managerhiërarchie op elke diepte doorlopen Je oefent met Voorbereiding op SQL-sollicitatiegesprekken door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Voorbereiding op SQL-sollicitatiegesprekken te beginnen?
Ervaring vooraf is niet nodig. Voorbereiding op SQL-sollicitatiegesprekken op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Een organigram doorlopen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Voorbereiding op SQL-sollicitatiegesprekken?
Ja. Elke les over Voorbereiding op SQL-sollicitatiegesprekken bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Anker- en recursieve leden
- Een organigram doorlopen
- Reeksen met getallen en datums genereren
- Oneindige recursie voorkomen