Voorbereiding op SQL-sollicitatiegesprekken · Les

Een organigram doorlopen

Een medewerker-managerhiërarchie op elke diepte doorlopen

Les 2 van 413 stappen

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.id gebruikt terwijl je naar boven wilde gaan, krijg je de verkeerde verzameling.
  • Het ankerfilter vergeten — laat WHERE id = X weg 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 depth voor inspringing en path voor 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.

Gratis beginnen

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

  1. Anker- en recursieve leden
  2. Een organigram doorlopen
  3. Reeksen met getallen en datums genereren
  4. Oneindige recursie voorkomen
← Terug naar Voorbereiding op SQL-sollicitatiegesprekken