Gängige Window-Funktionen in SQL

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:

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.