Kompletter Satz von Probeinterview-Aufgaben
Zeitlich begrenzte Aufgaben von Anfang bis Ende, die unter Interviewbedingungen Joins, Window Functions und CTEs kombinieren.
Kompletter Satz von Probeinterview-Aufgaben ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Ablauf einer SQL-Interviewrunde
Dieses Abschlusskapitel führt Sie unter Interviewbedingungen durch vollständige Übungsaufgaben, die Joins, Fensterfunktionen und CTEs kombinieren. Zuerst geht es um die übergeordnete Fähigkeit: wie Sie sich im Interview verhalten.
- Formulieren Sie das Problem in eigenen Worten neu und bestätigen Sie das Schema.
- Klären Sie Sonderfälle (NULL-Werte, Gleichstände, Duplikate), bevor Sie programmieren.
- Beschreiben Sie Ihren Ansatz und schreiben Sie anschließend die Abfrage.
- Testen Sie die Abfrage gedanklich anhand eines winzigen Beispiels.
Interviewer bewerten Ihren Prozess ebenso sehr wie Ihre fertige Abfrage.
Das gemeinsame Schema
Alle folgenden Aufgaben verwenden dieses kleine E-Commerce-Schema. Lesen Sie es einmal durch, damit jede Abfrage verständlich ist.
customers(id, name, country)orders(id, customer_id, order_date, status, amount)order_items(order_id, product_id, quantity)products(id, name, category, price)
Behalten Sie dieses Schema im Hinterkopf; im restlichen Kapitel wird auf diese Tabellen verwiesen.
-- orders.status is one of: 'paid','pending','cancelled'
-- amount is the order total in the customer's currencyAufgabe 1: Kunden mit den höchsten Ausgaben
„Geben Sie die drei Kunden mit den höchsten insgesamt bezahlten Ausgaben sowie deren Namen und Gesamtsumme zurück.“
Vorgehen: Auf bezahlte Bestellungen filtern, pro Kunde aggregieren, sortieren und begrenzen. Geben Sie an, dass Sie stornierte und ausstehende Bestellungen ausschließen – ein Sonderfall, den Interviewer gezielt einbauen.
SELECT c.name,
SUM(o.amount) AS total_spend
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'paid'
GROUP BY c.id, c.name
ORDER BY total_spend DESC
LIMIT 3;Aufgabe 2: Kunden ohne Bestellungen
„Listen Sie die Kunden auf, die noch nie eine Bestellung aufgegeben haben.“ Dies ist das Muster des Anti-Joins. Zwei saubere Lösungen: LEFT JOIN mit IS NULL oder NOT EXISTS.
Bevorzugen Sie NOT EXISTS, da es NULL-sicher ist (anders als NOT IN). Erwähnen Sie diesen Unterschied; genau darauf zielt die Frage des Interviewers ab.
-- NULL-safe anti-join
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.id
);Aufgabe 3: Zweithöchster Bestellbetrag
„Ermitteln Sie den zweithöchsten unterschiedlichen Bestellbetrag.“ Die sauberste, gleichstandsichere Lösung verwendet DENSE_RANK, sodass gleiche Beträge denselben Rang erhalten.
Zu erwähnender Sonderfall: Gibt es keinen zweiten unterschiedlichen Wert, liefert die Abfrage keine Zeilen zurück. Das kann akzeptabel sein oder je nach Anforderungen eine COALESCE-Umhüllung erfordern.
SELECT amount
FROM (
SELECT amount,
DENSE_RANK() OVER (ORDER BY amount DESC) AS rnk
FROM orders
) ranked
WHERE rnk = 2;Aufgabe 4: Neueste Bestellung pro Kunde
„Geben Sie die jeweils aktuellste Bestellung jedes Kunden zurück.“ Dies ist das Muster, die neueste Zeile pro Schlüssel beizubehalten. Es wird mit ROW_NUMBER gelöst, partitioniert nach Kunde und nach Datum absteigend sortiert.
Fügen Sie einen Tiebreaker (Bestell-ID) hinzu, damit das Ergebnis deterministisch ist, wenn zwei Bestellungen dasselbe Datum haben – ein Detail, das gute Kandidaten berücksichtigen.
SELECT customer_id, id AS order_id, order_date, amount
FROM (
SELECT o.*,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY order_date DESC, id DESC
) AS rn
FROM orders o
) t
WHERE rn = 1;Aufgabe 5: Wachstum im Monatsvergleich
„Berechnen Sie den monatlichen bezahlten Umsatz und seine prozentuale Veränderung gegenüber dem Vormonat.“ Dazu werden eine Aggregation in einer CTE und LAG kombiniert.
Schritt eins aggregiert nach Monat; Schritt zwei vergleicht jeden Monat mithilfe von LAG mit dem vorherigen. Sichern Sie die Division ab, damit der erste Monat (ohne Vormonat) keinen Fehler verursacht.
WITH monthly AS (
SELECT DATE_TRUNC('month', order_date) AS mth,
SUM(amount) AS revenue
FROM orders
WHERE status = 'paid'
GROUP BY DATE_TRUNC('month', order_date)
)
SELECT mth,
revenue,
LAG(revenue) OVER (ORDER BY mth) AS prev_revenue,
ROUND(
100.0 * (revenue - LAG(revenue) OVER (ORDER BY mth))
/ NULLIF(LAG(revenue) OVER (ORDER BY mth), 0), 2
) AS pct_change
FROM monthly
ORDER BY mth;Aufgabe 6: Bestes Produkt pro Kategorie
„Geben Sie für jede Kategorie das meistverkaufte Produkt nach Gesamtmenge zurück.“ Das Muster für Top-N pro Gruppe: aggregieren, innerhalb der Partition rangieren und auf Rang 1 filtern.
Wenn Gleichstände berücksichtigt werden sollen, ersetzen Sie ROW_NUMBER durch RANK, damit alle gemeinsam Führenden erscheinen. Wenn Sie diese Entscheidung benennen, zeigen Sie, dass Sie den Unterschied verstehen.
WITH sales AS (
SELECT p.category,
p.name AS product,
SUM(oi.quantity) AS qty
FROM order_items oi
JOIN products p ON p.id = oi.product_id
GROUP BY p.category, p.name
)
SELECT category, product, qty
FROM (
SELECT s.*,
ROW_NUMBER() OVER (
PARTITION BY category ORDER BY qty DESC
) AS rn
FROM sales s
) r
WHERE rn = 1;Aufgabe 7: Laufende Umsatzsumme
„Zeigen Sie die laufende (kumulative) Summe des bezahlten Umsatzes pro Tag.“ Ein Fenster-SUM mit einem sortierten Frame erzeugt die laufende Summe ohne Self-Join.
Erwähnen Sie das ROWS-Framing für eine echte zeilenweise kumulative Summe; der Standard-Frame RANGE kann sich bei gleichen Datumswerten unerwartet verhalten.
SELECT order_date,
SUM(daily) OVER (
ORDER BY order_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total
FROM (
SELECT order_date, SUM(amount) AS daily
FROM orders
WHERE status = 'paid'
GROUP BY order_date
) d
ORDER BY order_date;Aufgabe 8: Aufeinanderfolgende aktive Tage
„Finden Sie Nutzer mit mindestens drei aufeinanderfolgenden Tagen, an denen eine bezahlte Bestellung eingegangen ist.“ Dies ist eine Variante des Lücken-und-Inseln-Problems mit dem Trick der Differenz von Zeilennummern.
Wenn Sie eine benutzerspezifische Zeilennummer vom Datum subtrahieren, ergibt sich innerhalb einer zusammenhängenden Folge eine konstante Zahl. Gruppieren Sie nach dieser Zahl und zählen Sie. Das ist ein Signal für Kenntnisse auf Senior-Niveau.
WITH days AS (
SELECT DISTINCT customer_id, order_date
FROM orders WHERE status = 'paid'
),
grp AS (
SELECT customer_id, order_date,
order_date - (ROW_NUMBER() OVER (
PARTITION BY customer_id ORDER BY order_date
) * INTERVAL '1 day') AS island
FROM days
)
SELECT customer_id, COUNT(*) AS streak_len
FROM grp
GROUP BY customer_id, island
HAVING COUNT(*) >= 3;Leistung und typische Fallstricke
Nach einer korrekten Abfrage fragen Interviewer: „Wie würden Sie sie schneller machen?“ und achten auf typische Fehler. Halten Sie eine Checkliste bereit:
- Indizieren Sie die Join- und Filterspalten (z. B.
orders(customer_id, status)); vermeiden Sie Funktionen auf indizierten Spalten in WHERE. - Bevorzugen Sie EXISTS gegenüber IN bei großen Anti-Joins;
NOT INmit einem NULL-Wert liefert stillschweigend kein Ergebnis. - Wenn Sie eine Spalte aus einem Outer Join in WHERE filtern, wird dieser unbemerkt zu einem Inner Join.
- Fügen Sie immer einen Tiebreaker hinzu, damit Top-N-Ergebnisse deterministisch sind.
- Prüfen Sie den EXPLAIN-Plan auf sequenzielle Scans in großen Tabellen.
Kurzer Test
Sie benötigen die jeweils einzige aktuellste Bestellung jedes Kunden, und zwei Bestellungen können dasselbe Datum haben.
Zusammenfassung: Vollständiger Übungsdatensatz für Interviews
Sie haben die häufigsten Interviewaufgaben von Anfang bis Ende bearbeitet:
- Aggregation + LIMIT für Top-N-Ausgaben.
- Anti-Joins mit NOT EXISTS (NULL-sicher).
- DENSE_RANK für den Nth-Höchsten, ROW_NUMBER für die neueste Zeile pro Schlüssel und die beste Zeile pro Gruppe.
- LAG für Monatsvergleiche, SUM OVER für laufende Summen.
- Der Zeilennummern-Trick für Lücken und Inseln bei Folgen.
- Schließen Sie jede Antwort mit einer Besprechung von Indizes, EXPLAIN und typischen Fallstricken ab.
Häufig gestellte Fragen
Ist die Lektion „Kompletter Satz von Probeinterview-Aufgaben“ kostenlos?
Ja — der vollständige Text von „Kompletter Satz von Probeinterview-Aufgaben“ 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 „Kompletter Satz von Probeinterview-Aufgaben“?
Zeitlich begrenzte Aufgaben von Anfang bis Ende, die unter Interviewbedingungen Joins, Window Functions und CTEs kombinieren. 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 4 von 4.
Wie lange dauert die Lektion „Kompletter Satz von Probeinterview-Aufgaben“?
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
- Normalisierung bis zur 3NF
- ER-Modellierung und Kardinalität von Beziehungen
- Star-Schema und Data-Warehouse-Design
- Kompletter Satz von Probeinterview-Aufgaben