Window-Funktionen gehören zu den mächtigsten Werkzeugen in SQL. Sie ermöglichen analytische Berechnungen über Zeilen hinweg, ohne das Ergebnis zu gruppieren. Damit lassen sich Trends, Rankings und Vergleiche direkt im Query berechnen – ein klarer Vorteil gegenüber klassischen Aggregationen mit GROUP BY.
1️⃣ Grundprinzip von Window-Funktionen
Die Syntax folgt meist diesem Schema:
Funktion() OVER (
PARTITION BY Spalte
ORDER BY Spalte
)
- PARTITION BY → teilt die Daten in logische Gruppen (ähnlich wie GROUP BY, aber ohne Aggregation)
- ORDER BY → legt die Reihenfolge innerhalb der Partition fest
- OVER() → definiert das „Fenster“, über das die Funktion arbeitet
2️⃣ ROW_NUMBER() – Laufende Nummer je Gruppe
SELECT
Kunde,
Bestellung,
ROW_NUMBER() OVER (PARTITION BY Kunde ORDER BY Datum) AS BestellNr
FROM Bestellungen;
➡️ Vergibt eine eindeutige Nummer je Kunde – hilfreich bei der Auswahl der jüngsten Bestellung pro Kunde.
3️⃣ RANK() und DENSE_RANK() – Ranglisten erstellen
SELECT
Produkt,
Umsatz,
RANK() OVER (ORDER BY Umsatz DESC) AS Rang
FROM Umsätze;
RANK(): Überspringt Rangnummern bei Gleichständen (1, 2, 2, 4 …)DENSE_RANK(): Nummeriert ohne Lücken (1, 2, 2, 3 …)
➡️ Ideal für Top-N-Analysen oder Wettbewerbsauswertungen.
4️⃣ LAG() und LEAD() – Vorherige oder nächste Zeile vergleichen
SELECT
Monat,
Umsatz,
LAG(Umsatz) OVER (ORDER BY Monat) AS Vormonat,
Umsatz - LAG(Umsatz) OVER (ORDER BY Monat) AS Veränderung
FROM Monatsumsätze;
➡️ Perfekt für Trendanalysen, z. B. Umsatzänderungen im Monatsvergleich.
5️⃣ NTILE() – Werte in Gruppen einteilen
SELECT
Kunde,
Umsatz,
NTILE(4) OVER (ORDER BY Umsatz DESC) AS Quartil
FROM Kunden;
➡️ Teilt Datensätze in gleich große Gruppen (z. B. Quartile) – nützlich für Segmentierungen oder Performancevergleiche.
6️⃣ SUM(), AVG(), COUNT() über Fenster
Auch klassische Aggregationsfunktionen lassen sich als Window-Funktionen nutzen:
SELECT
Kunde,
Monat,
Umsatz,
SUM(Umsatz) OVER (PARTITION BY Kunde ORDER BY Monat) AS kumUmsatz
FROM Monatsumsätze;
➡️ Damit berechnest du laufende Summen oder Durchschnittswerte, ohne zu gruppieren.
7️⃣ Beispiel: KPI-Validierung über Zeit
Ein klassischer Anwendungsfall in Data Analytics ist die Prüfung von Kennzahlen über Zeiträume hinweg.
SELECT
Region,
Monat,
Umsatz,
LAG(Umsatz) OVER (PARTITION BY Region ORDER BY Monat) AS Vormonat,
(Umsatz - LAG(Umsatz) OVER (PARTITION BY Region ORDER BY Monat)) / NULLIF(LAG(Umsatz) OVER (PARTITION BY Region ORDER BY Monat),0) AS Wachstumsrate
FROM Umsatzreport;
➡️ Mit nur wenigen Zeilen Code erkennst du Trends und Ausreißer – ohne zusätzliche Tabellen oder Joins.
8️⃣ Performance-Tipp
Window-Funktionen können rechenintensiv sein. Verwende:
- Indizes auf Sortierspalten (
ORDER BY) - CTEs oder Subqueries zur Reduzierung der Datensätze
- Materialized Views, falls sich Berechnungen oft wiederholen
📌 Interne Links auf datenanalyst.com:
- SQL TRUNCATE vs DELETE – Der Unterschied erklärt
- Qualitätsprüfungen in SQL – Wie du KPIs mit Logik sicherstellst
- Divide and Conquer in SQL – So findest du Fehler durch Logik statt Struktur
Fazit:
Window-Funktionen sind unverzichtbar, wenn du Analysen direkt in SQL durchführen willst. Statt Umwege über Zwischentabellen oder Excel kannst du mit einer einzigen Abfrage Ranking, Vergleich und Trendberechnung kombinieren – performant, elegant und nachvollziehbar.
