Einen mehrstufigen Funnel erstellen
Benutzer zählen, die jeden geordneten Schritt erreichen, und Konversionsraten pro Schritt berechnen.
Einen mehrstufigen Funnel erstellen ist eine kostenlose SQL Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Was eine Funnel-Frage wirklich prüft
Wenn ein Interviewer sagt: „Erstellen Sie mir einen Signup-Funnel“, prüft er, ob Sie eindeutige Nutzer zählen können, die jede geordnete Stufe erreichen, und den Abfall zwischen den Stufen ausdrücken können.
Ein Funnel enthält Stufen wie visit -> signup -> activate -> purchase. Das Ergebnis besteht normalerweise aus einer Zeile pro Stufe mit einer Nutzeranzahl und einer Conversion-Rate.
- Zählen Sie Nutzer, nicht Ereignisse (wenn ein Nutzer ein Ereignis zweimal auslöst, zählt er trotzdem nur einmal).
- Die Schritte sind geordnet: Wer Schritt 3 erreicht, muss Schritt 1 und 2 durchlaufen haben.
Die Ereignistabelle, die Sie erhalten werden
Bei fast jeder Funnel-Frage erhalten Sie eine einzelne events-Tabelle in Langform. Stellen Sie sich diese Struktur vor:
user_id– wer die Aktion ausgeführt hatevent_name– zum Beispiel 'visit', 'signup', 'purchase'event_time– ein Zeitstempel
Pro Aktion gibt es eine Zeile. Ihre Aufgabe besteht darin, daraus eine schrittweise Zählung zu erstellen. Bestätigen Sie immer die exakten Ereignisnamen mit dem Interviewer, bevor Sie SQL schreiben.
CREATE TABLE events (
user_id INT,
event_name VARCHAR(50),
event_time TIMESTAMP
);Nutzer an einer Stufe zählen
Beginnen Sie einfach: Wie viele eindeutige Nutzer haben eine einzelne Stufe erreicht? Verwenden Sie COUNT(DISTINCT user_id) mit einem Filter auf den Ereignisnamen.
Das ist der Grundbaustein jedes Funnels. Wenn Sie eine Stufe sauber zählen können, können Sie alle zählen.
SELECT COUNT(DISTINCT user_id) AS users_who_signed_up
FROM events
WHERE event_name = 'signup';Bedingte Aggregation für alle Stufen
Die saubere Antwort im Interview zählt jede Stufe in einem Durchlauf, und zwar mit bedingter Aggregation: einem CASE innerhalb von COUNT(DISTINCT ...).
Zählen Sie für jede Stufe die eindeutigen Nutzer, deren Ereignis dieser Stufe entspricht. Ein Scan, eine Zeile mit den Stufensummen.
SELECT
COUNT(DISTINCT CASE WHEN event_name = 'visit' THEN user_id END) AS step1_visit,
COUNT(DISTINCT CASE WHEN event_name = 'signup' THEN user_id END) AS step2_signup,
COUNT(DISTINCT CASE WHEN event_name = 'purchase' THEN user_id END) AS step3_purchase
FROM events;Der versteckte Fehler: Stufen sind nicht geordnet
Die gerade betrachtete Abfrage enthält eine Falle, die Interviewer gerne einbauen. Sie zählt alle Nutzer, die 'purchase' ausgelöst haben, selbst wenn sie in den Daten nie 'visit' oder 'signup' ausgeführt haben.
In einem echten Funnel muss jede spätere Stufe eine Teilmenge der vorherigen Stufe sein. Werden Ereignisse unabhängig voneinander gezählt, kann Stufe 3 größer als Stufe 2 sein – logisch ist das für einen Funnel unmöglich.
Die Lösung: Verknüpfen Sie die Stufen jedes Nutzers, normalerweise indem Sie zunächst auf eine Zeile pro Nutzer verdichten.
Eine Zeile pro Nutzer mit Flags
Das robuste Muster: Verdichten Sie das Ereignisprotokoll auf eine Zeile pro Nutzer und verwenden Sie für jede Stufe ein boolesches Flag (als 0/1), das angibt, ob der Nutzer sie jemals ausgeführt hat. MAX(CASE ...) wandelt das lange Protokoll in eine breite Zusammenfassung pro Nutzer um.
WITH user_steps AS (
SELECT
user_id,
MAX(CASE WHEN event_name = 'visit' THEN 1 ELSE 0 END) AS did_visit,
MAX(CASE WHEN event_name = 'signup' THEN 1 ELSE 0 END) AS did_signup,
MAX(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS did_purchase
FROM events
GROUP BY user_id
)
SELECT * FROM user_steps;Die Reihenfolge der Stufen erzwingen
Erzwingen Sie nun die Funnel-Regel: Ein Nutzer zählt für Stufe N nur dann, wenn er auch jede vorherige Stufe durchlaufen hat. Das Erreichen von 'purchase' zählt nur, wenn der Nutzer auch 'visit' und 'signup' ausgeführt hat.
Addieren Sie die Flags mit den erforderlichen Bedingungen, die Sie per AND verknüpfen, sodass jede Stufe tatsächlich eine Teilmenge der vorherigen ist.
WITH user_steps AS (
SELECT
user_id,
MAX(CASE WHEN event_name = 'visit' THEN 1 ELSE 0 END) AS did_visit,
MAX(CASE WHEN event_name = 'signup' THEN 1 ELSE 0 END) AS did_signup,
MAX(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS did_purchase
FROM events
GROUP BY user_id
)
SELECT
SUM(did_visit) AS step1_visit,
SUM(CASE WHEN did_visit = 1 AND did_signup = 1 THEN 1 ELSE 0 END) AS step2_signup,
SUM(CASE WHEN did_visit = 1 AND did_signup = 1 AND did_purchase = 1 THEN 1 ELSE 0 END) AS step3_purchase
FROM user_steps;Zählungen in ein übersichtliches Langformat umwandeln
Interviewer bevorzugen häufig eine Zeile pro Stufe statt einer einzigen breiten Zeile. Wandeln Sie die breiten Summen mit einem kleinen UNION ALL in ein Langformat um und fügen Sie eine Stufennummer für die Sortierung hinzu.
Dadurch werden die Berechnung der Conversion-Rate und die Erstellung von Diagrammen im nächsten Schritt deutlich einfacher.
WITH funnel AS (
SELECT 1 AS step_no, 'visit' AS step_name, 1000 AS users UNION ALL
SELECT 2, 'signup', 420 UNION ALL
SELECT 3, 'purchase', 95
)
SELECT step_no, step_name, users
FROM funnel
ORDER BY step_no;Conversion-Rate von Stufe zu Stufe
Zwei Raten sind wichtig, und Interviewer werden fragen, welche Sie meinen:
- Stufen-Conversion: Nutzer an dieser Stufe geteilt durch die Nutzer an der vorherigen Stufe.
- Gesamt-Conversion: Nutzer an dieser Stufe geteilt durch die Nutzer am oberen Ende des Funnels.
Verwenden Sie LAG, um für die Conversion von Stufe zu Stufe die Anzahl der vorherigen Stufe zu ermitteln. Wandeln Sie den Wert in eine Dezimalzahl um, damit keine Ganzzahldivision entsteht.
WITH funnel AS (
SELECT 1 AS step_no, 'visit' AS step_name, 1000 AS users UNION ALL
SELECT 2, 'signup', 420 UNION ALL
SELECT 3, 'purchase', 95
)
SELECT
step_name,
users,
ROUND(100.0 * users / LAG(users) OVER (ORDER BY step_no), 1) AS step_conv_pct
FROM funnel
ORDER BY step_no;Gesamt-Conversion vom Anfang des Funnels
Für die Gesamt-Conversion teilen Sie jede Stufe durch die Anzahl an der ersten Stufe. FIRST_VALUE über den geordneten Funnel hält diese oberste Zahl für jede Zeile fest.
Erwähnen Sie gegenüber dem Interviewer immer, dass Sie eine Ganzzahldivision verhindert haben, indem Sie mit 100.0 multiplizieren.
WITH funnel AS (
SELECT 1 AS step_no, 'visit' AS step_name, 1000 AS users UNION ALL
SELECT 2, 'signup', 420 UNION ALL
SELECT 3, 'purchase', 95
)
SELECT
step_name,
users,
ROUND(100.0 * users / FIRST_VALUE(users) OVER (ORDER BY step_no), 1) AS overall_pct
FROM funnel
ORDER BY step_no;Den gesamten Funnel zusammenführen
Hier ist die durchgängige Antwort, die Interviewer erwarten: Verdichten Sie auf Flags pro Nutzer, erzwingen Sie die Reihenfolge, wandeln Sie in ein Langformat um und berechnen Sie anschließend beide Raten. Erläutern Sie jeden Schritt laut und nennen Sie den Zweck jedes CTE.
Diese Struktur lässt sich skalieren: Fügen Sie eine Stufe hinzu, indem Sie ein Flag und eine UNION-ALL-Zeile ergänzen.
WITH user_steps AS (
SELECT user_id,
MAX(CASE WHEN event_name = 'visit' THEN 1 ELSE 0 END) AS s1,
MAX(CASE WHEN event_name = 'signup' THEN 1 ELSE 0 END) AS s2,
MAX(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS s3
FROM events GROUP BY user_id
),
totals AS (
SELECT 1 AS step_no, 'visit' AS step_name, SUM(s1) AS users FROM user_steps UNION ALL
SELECT 2, 'signup', SUM(CASE WHEN s1=1 AND s2=1 THEN 1 ELSE 0 END) FROM user_steps UNION ALL
SELECT 3, 'purchase', SUM(CASE WHEN s1=1 AND s2=1 AND s3=1 THEN 1 ELSE 0 END) FROM user_steps
)
SELECT step_name, users,
ROUND(100.0 * users / LAG(users) OVER (ORDER BY step_no), 1) AS step_pct
FROM totals ORDER BY step_no;Kurztest
Ein Interviewer stellt fest, dass Ihr Funnel 95 Nutzer bei 'purchase', aber nur 80 bei 'signup' ausweist. Was ist die wahrscheinlichste Ursache?
Zusammenfassung: Mehrstufige Funnels
Sie können jetzt einen Funnel so erstellen, wie es in Interviews erwartet wird:
- Zählen Sie eindeutige Nutzer pro geordneter Stufe, niemals rohe Ereignisse.
- Verdichten Sie das Ereignisprotokoll mit Flags aus
MAX(CASE ...)auf eine Zeile pro Nutzer. - Erzwingen Sie die Reihenfolge, sodass jede Stufe eine Teilmenge der vorherigen ist.
- Berechnen Sie die Conversion von Stufe zu Stufe (
LAG) und die Gesamt-Conversion (FIRST_VALUE) und verhindern Sie dabei eine Ganzzahldivision.
Als Nächstes stellen Sie sicher, dass diese Schritte tatsächlich in der richtigen Reihenfolge und innerhalb eines Zeitfensters stattgefunden haben.
Häufig gestellte Fragen
Ist die Lektion „Einen mehrstufigen Funnel erstellen“ kostenlos?
Ja — der vollständige Text von „Einen mehrstufigen Funnel erstellen“ 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 „Einen mehrstufigen Funnel erstellen“?
Benutzer zählen, die jeden geordneten Schritt erreichen, und Konversionsraten pro Schritt berechnen. 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 1 von 4.
Wie lange dauert die Lektion „Einen mehrstufigen Funnel erstellen“?
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
- Einen mehrstufigen Funnel erstellen
- Geordnete Ereignisse und Zeitfenster
- Zuweisung und Kennzahlen von A/B-Tests
- Lift, Signifikanz und Schutzprüfungen in SQL