🪟Window Functions (Fensterfunktionen)
funktion() OVER (PARTITION BY … ORDER BY … Rahmen) rechnet für jede Zeile über ein „Fenster“ benachbarter Zeilen – Ranglisten, laufende Summen, gleitende Durchschnitte, Vergleich mit der Vorzeile.
Zeile anklicken → ihr Fensterrahmen wird markiert (die Zeilen, aus denen der Wert berechnet wird).
| name | rolle | gehalt | rang |
|---|---|---|---|
| Ida Roth | Geschäftsführung | 6200 | 1 |
| Karl Mehl | Filialleitung | 4300 | 2 |
| Lena Fuchs | Einkauf | 3900 | 3 |
| Max Brandt | Verkauf | 3100 | 4 |
| Nora Wolf | Verkauf | 3100 | 4 |
| Otto Sauer | Lager | 2800 | 6 |
SELECT name, rolle, gehalt, RANK() OVER (ORDER BY gehalt DESC) AS rang FROM mitarbeiter ORDER BY gehalt DESC
RANK vergibt bei Gleichstand denselben Rang und überspringt danach Plätze (1, 2, 3, 4, 4, 6) – wie bei Olympia.
Anders als GROUP BY behalten Fensterfunktionen alle Zeilen – jede bekommt nur eine zusätzliche Spalte. Sie werden nach WHERE/GROUP BY/HAVING und vor ORDER BY berechnet.
🧩Die drei Teile von OVER (…)
💡 PARTITION BY
Teilt die Zeilen in unabhängige Fenster (wie GROUP BY, aber ohne Zusammenfassen). Ohne PARTITION BY ist die ganze Ergebnismenge ein Fenster.
💡 ORDER BY
Reihenfolge innerhalb der Partition – nötig für Ränge und laufende Summen. Unabhängig vom ORDER BY der Abfrage.
💡 Rahmen (Frame)
ROWS zählt physische Zeilen, RANGE arbeitet mit Werten (gleiche Werte = Peers gehören zusammen). Standard mit ORDER BY:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.🧪Ausprobieren
SQL-Engine wird geladen …