0Pricing
Coding Interview Prep · Lektion

Mehrere CTEs verketten

Eine Pipeline benannter Schritte erstellen, die aufeinander verweisen

Mehrere CTEs verketten ist eine kostenlose Coding 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 Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Warum CTEs verkettet werden

Aufgaben aus echten Vorstellungsgesprächen lassen sich selten in einem einzigen Schritt lösen. Durch das Verketten von CTEs können Sie eine Pipeline aus benannten Stufen aufbauen, in der jede Stufe die Ausgabe der vorherigen verarbeitet. Das entspricht der Vorgehensweise, mit der erfahrene Entwicklerinnen und Entwickler eine schwierige Abfrage in überschaubare Teile zerlegen.

Statt Unterabfragen drei Ebenen tief zu verschachteln, schreiben Sie jeden Schritt einmal, geben ihm einen Namen und lassen spätere Schritte darauf verweisen.

Die Syntax mit durch Kommas getrennten CTEs

Um mehrere CTEs zu definieren, schreiben Sie WITH einmal und trennen anschließend jeden benannten Block durch ein Komma. Sie wiederholen das Schlüsselwort WITH nicht.

  • Ein WITH am Anfang.
  • Ein Komma zwischen den einzelnen CTE-Definitionen.
  • Kein Komma vor der abschließenden Hauptabfrage.
WITH a AS (
    SELECT customer_id FROM orders
),
b AS (
    SELECT customer_id FROM a
)
SELECT *
FROM b;

Spätere CTEs können auf frühere verweisen

Die Stärke des Verkettens: Eine CTE kann aus jeder CTE lesen, die vor ihr definiert wurde. Diese Sichtbarkeit nur in Vorwärtsrichtung ermöglicht den Aufbau einer Abhängigkeitskette.

Eine frühere CTE kann eine spätere nicht sehen, daher ist die Reihenfolge wichtig. Ordnen Sie Ihre Stufen von den Rohdaten bis zur endgültigen Form an.

WITH filtered AS (
    SELECT *
    FROM events
    WHERE event_type = 'purchase'
),
per_user AS (
    SELECT user_id, COUNT(*) AS purchases
    FROM filtered
    GROUP BY user_id
)
SELECT *
FROM per_user;

Durchgehendes Beispiel: Pipeline mit drei Stufen

Frage: Wie hoch ist der durchschnittliche Umsatz unter den Kundinnen und Kunden, die mehr als 1.000 Dollar ausgegeben haben? Zerlegen Sie die Aufgabe in drei Stufen: den Gesamtumsatz pro Kundin oder Kunde berechnen, die Großausgeber herausfiltern und anschließend den Durchschnitt bilden.

Jeder CTE-Name dokumentiert seinen Zweck, sodass eine prüfende Person den Ablauf sofort versteht.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
),
big_spenders AS (
    SELECT customer_id, total
    FROM spend
    WHERE total > 1000
)
SELECT AVG(total) AS avg_big_spend
FROM big_spenders;

Die Definitionsreihenfolge ist entscheidend

Da die Sichtbarkeit nur in Vorwärtsrichtung funktioniert, muss eine CTE, die von einer anderen abhängt, nach ihrer Abhängigkeit aufgeführt werden. Wenn Sie auf einen noch nicht definierten Namen verweisen, gibt die Datenbank den Fehler „relation does not exist“ aus.

Eine gute Gewohnheit: Lesen Sie Ihre CTE-Liste von oben nach unten und prüfen Sie, ob jeder verwendete Name bereits weiter oben vorkommt.

Von mehreren anderen CTEs auf eine CTE verweisen

Eine einzelne CTE kann mehrere nachgelagerte CTEs versorgen. Hier zeigt sich der Vorteil gegenüber verschachtelten Unterabfragen: Sie berechnen ein Basisergebnis einmal und leiten daraus mehrere Zweige ab.

Hier lesen sowohl active als auch recent aus base und vermeiden dadurch doppelte Logik.

WITH base AS (
    SELECT * FROM users WHERE deleted = false
),
active AS (
    SELECT id FROM base WHERE last_login > NOW() - INTERVAL '7 days'
),
recent AS (
    SELECT id FROM base WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT (SELECT COUNT(*) FROM active) AS active_cnt,
       (SELECT COUNT(*) FROM recent) AS recent_cnt;

Zwei CTEs miteinander verknüpfen

Verkettete CTEs werden häufig in der Hauptabfrage miteinander verknüpft. Berechnen Sie jede Seite separat und führen Sie sie anschließend zusammen. So bleibt jede Berechnung isoliert und die Verknüpfung ist unkompliziert.

Im Folgenden berechnen wir die Anzahl der Bestellungen und die Anzahl der Rückerstattungen unabhängig voneinander und verknüpfen sie anschließend pro Kundin oder Kunde.

WITH orders_cte AS (
    SELECT customer_id, COUNT(*) AS orders
    FROM orders GROUP BY customer_id
),
refunds_cte AS (
    SELECT customer_id, COUNT(*) AS refunds
    FROM refunds GROUP BY customer_id
)
SELECT o.customer_id, o.orders, COALESCE(r.refunds, 0) AS refunds
FROM orders_cte o
LEFT JOIN refunds_cte r ON r.customer_id = o.customer_id;

Lesbarkeit statt Verschachtelung

Vergleichen Sie eine dreistufig verschachtelte Unterabfrage mit einer Pipeline aus drei CTEs. Bei der verschachtelten Variante muss die lesende Person die Struktur gedanklich von innen nach außen auflösen. Die CTE-Variante liest sich in Ausführungsreihenfolge von oben nach unten.

Interviewerinnen und Interviewer bevorzugen den CTE-Ansatz, weil sie ihn auch in produktivem Code warten möchten. Die Benennung jeder Stufe ist eine Dokumentation, die nicht veraltet.

Ein häufiger Fehler beim Verketten

Anfängerinnen und Anfänger setzen häufig ein Komma nach der letzten CTE, direkt vor dem Haupt-SELECT. Dieses nachgestellte Komma verursacht einen Syntaxfehler.

  • Kommas stehen nur zwischen den CTE-Definitionen.
  • Auf die letzte schließende Klammer folgt direkt die Hauptabfrage, ohne Komma.

Eine weitere Falle: Jede CTE benötigt innerhalb ihrer Klammern ein vollständiges eigenes SELECT.

Wird jede Stufe separat ausgeführt?

Ein nuancierter Punkt im Vorstellungsgespräch: Logisch liest sich die Pipeline wie eine Abfolge einzelner Schritte, aber der Optimizer kann sie in einen einzigen Ausführungsplan integrieren und zusammenfassen. In den meisten Datenbank-Engines müssen Sie nicht für eine Materialisierung von Zwischenergebnissen bezahlen.

Das Verketten hilft Ihnen also, die Abfrage zu verstehen, ohne zwangsläufig Leistung zu kosten. Erwähnen Sie diesen Punkt, um Ihre fachliche Tiefe zu zeigen.

Stufen wie in einer Pipeline benennen

Gute Namen für die einzelnen Stufen machen eine Abfrage zu selbstdokumentierendem Code. Bevorzugen Sie Namen, die die Ausgabe jedes Schritts beschreiben, nicht die ausgeführte Operation.

  • spend und big_spenders sind besser als step1 und step2.
  • Eine lesende Person sollte den gesamten Ablauf allein anhand der CTE-Namen erkennen können.
  • Eine einheitliche Benennung der Stufen macht die Verknüpfung in der Hauptabfrage offensichtlich.

Im Vorstellungsgespräch signalisiert eine klare Benennung der Stufen, dass Sie wartbares SQL für den produktiven Einsatz schreiben.

Kurzer Selbsttest

Prüfen Sie, wie gut Sie nachvollziehen können, wie verkettete CTEs aufeinander verweisen.

Rückblick: CTEs verketten

Sie haben gelernt, Pipelines aufzubauen: ein WITH, durch Kommas getrennte CTE-Definitionen und eine Sichtbarkeit nur in Vorwärtsrichtung, bei der jede Stufe auf frühere Stufen zugreifen kann.

  • Ordnen Sie die CTEs von den Rohdaten bis zum endgültigen Ergebnis an.
  • Verwenden Sie eine Basis-CTE in mehreren nachgelagerten Schritten wieder.
  • Kein nachgestelltes Komma vor der Hauptabfrage.
  • Verkettungen verbessern die Lesbarkeit, ohne die Leistung zwangsläufig zu beeinträchtigen.

Als Nächstes: CTEs mit Unterabfragen und temporären Tabellen vergleichen.

Häufig gestellte Fragen

Ist die Lektion „Mehrere CTEs verketten“ kostenlos?

Ja — der vollständige Text von „Mehrere CTEs verketten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Mehrere CTEs verketten“?

Eine Pipeline benannter Schritte erstellen, die aufeinander verweisen Du übst Coding 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 Coding Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. Coding 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 „Mehrere CTEs verketten“?

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 Coding Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede Coding 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

  1. Ihre erste CTE schreiben
  2. Mehrere CTEs verketten
  3. CTE oder Unterabfrage oder temporäre Tabelle
  4. Verschachtelte Abfragen in CTEs umstrukturieren
← Zurück zu Coding Interview Prep