Auf den ersten Blick scheint es, als hätte SQL schon alles für Datenanalyse: GROUP BY, Aggregates, Subqueries... Aber das ist nur der Anfang. Willkommen in der Welt der Window Functions – ein mächtiges Tool, mit dem du zeilenweise mit Daten arbeiten kannst und dabei den kompletten Kontext behältst.
Window Functions machen es möglich, Berechnungen wie Summe, Durchschnitt, Ränge und mehr über ein „Fenster“ von Zeilen zu machen, ohne die Daten zu aggregieren. Das heißt: Im Gegensatz zu klassischen Aggregatfunktionen (SUM(), AVG(), COUNT()) bekommst du sowohl das Ergebnis als auch die Details in jeder Zeile.
Stell dir vor, du willst den kumulierten Umsatz pro Bestellung berechnen. Mit GROUP BY würdest du die einzelnen Bestellungen verlieren – es bliebe nur die Summe. Mit einer Window Function kannst du das Ergebnis direkt zu jeder Zeile hinzufügen, ohne irgendwas zu verlieren.
Window Functions sind besonders praktisch, weil sie die Daten nicht zerstören: Jede Zeile bleibt erhalten, und die Berechnungsergebnisse werden einfach als neue Spalten ergänzt. So kannst du komplexe Analysen ohne Subqueries und komplizierte Konstrukte machen – alles direkt in einem Query. Solche Funktionen sind perfekt für Aufgaben wie Ranking, Moving Averages oder den Vergleich von Werten zwischen Zeilen. Der Code bleibt lesbar und das Ergebnis ist präzise.
Wann ist das besonders nützlich:
- Ranking von Mitarbeitern, Verkäufern, Produkten – wer ist auf welchem Platz.
- Zeitreihen – wie sich etwas über Tage oder Wochen verändert hat.
- Sales und Finanzen – wie viel hat sich angesammelt, welche Bestellungen sind über dem Durchschnitt, wer ist in den Top 25%.
Wo werden Window Functions eingesetzt
In jedem Bereich, wo Kontext wichtig ist und nicht nur das Endergebnis:
- Sales-Reports;
- Kundenverhaltensanalyse;
- Charts mit kumulierten Metriken bauen;
- Daten segmentieren (z.B. nach Quartilen);
- Abweichungen und Trends berechnen.
Sie sind echt ein Gamechanger für Analysten, die täglich mit SQL arbeiten. Schauen wir uns ein paar Beispiele aus der echten Welt an, wo Window Functions dein Retter sein können.
Beispiel 1: Daten-Ranking
Stell dir vor, du hast eine Liste von Studierenden mit ihren Noten im Examen. Du willst jedem Studierenden seine Position in der Klasse zuweisen. Mit Window Functions ist das super easy. Zum Beispiel helfen dir die Funktionen RANK() oder ROW_NUMBER() dabei.
Beispiel 2: Analyse von Zeitdaten
Und was, wenn du wissen willst, wie sich die Umsätze einer Firma über die Monate verändert haben? Du brauchst eine kumulative Umsatzsumme. Mit der Window Function SUM() und einem passenden Fenster bekommst du das easy hin.
Beispiel 3: Quartile und Gruppierung
Daten in gleich große Gruppen aufteilen (z.B. nach Einkommen) für die Kundensegmentierung? Hier hilft dir die Funktion NTILE(). Lass uns rausfinden, welche Kunden in den Top 25% sind und wer unten im Ranking steht.
Wie sieht das aus?
Eine Window Function ergänzt einfach das Ergebnis im finalen Datenset:
SELECT
student_id,
grade,
RANK() OVER (ORDER BY grade DESC) AS rank
FROM
students;
Hier bekommst du eine Tabelle, in der jeder Studierende seinen einzigartigen Rang nach Note hat.
Einfache Analogie
Stell dir vor, du bist mit einer Gruppe Freunde joggen. Jeder läuft in seinem eigenen Tempo, aber du willst wissen, auf welchem Platz du gerade bist. Anstatt alle anzuhalten und eine Rangliste zu machen (wie es GROUP BY tun würde), schaust du einfach auf die Leute um dich herum und bestimmst deinen aktuellen Rang.
Genau das ist eine Window Function: Sie stoppt das Rennen nicht, teilt nicht alle in Gruppen – sie ergänzt einfach die Info, während alles weiterläuft. Jeder läuft weiter, aber jetzt hast du zusätzliche Analysen – zum Beispiel, wie viele vor dir sind, wie dein Tempo im Vergleich zum Durchschnitt ist usw.
Vorteile gegenüber klassischen Ansätzen
Schauen wir uns eine klassische Aufgabe an: Ranking von Verkäufern nach Umsatz. Es gibt zwei Wege:
Ohne Window Functions. Du musst eine Subquery oder sogar mehrere Subqueries machen, um erst die Daten zu sortieren und dann zu nummerieren. Das ist nicht nur lang, sondern auch schwer zu lesen.
Mit Window Functions. Nur ein Query mit schönem und verständlichem Syntax, und das Ergebnis ist schon da. Zum Beispiel:
SELECT
seller_id,
revenue,
RANK() OVER (PARTITION BY region ORDER BY revenue DESC) AS rank_in_region
FROM
sales;
Dieser Query teilt die Verkäufer direkt nach Regionen auf und nummeriert sie absteigend nach Umsatz.
Echtes Beispiel
Stell dir vor, du bist Analyst und analysierst Sales-Daten. Du willst wissen:
- Gesamteinnahmen pro Monat,
- wie sich der Umsatz im Vergleich zum Vormonat verändert hat,
- Regionen nach Gesamteinnahmen ranken.
All das kannst du mit Window Functions machen – sogar in einem einzigen Query. Aber das ist schon Stoff für die nächsten Lectures.
Jetzt, wo du die Basics über Window Functions kennst, bist du bereit für den Syntax und die Power von ROW_NUMBER(), RANK(), DENSE_RANK() und NTILE(). Weiter geht’s zur nächsten Lecture!
GO TO FULL VERSION