Frame-Klauseln: ROWS vs. RANGE
Wählen Sie zwischen den Frame-Klauseln ROWS BETWEEN und RANGE BETWEEN und verstehen Sie, wie beide mit Duplikaten und Lücken umgehen.
Frame-Klauseln: ROWS vs. RANGE ist eine kostenlose SQL Academy-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 Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Der Frame innerhalb von OVER
Eine Fensterfunktion wird über einen Frame ausgewertet — eine Teilmenge der Zeilen aus der Partition. Der Frame wird definiert durch:
OVER (
PARTITION BY ...
ORDER BY ...
ROWS BETWEEN <start> AND <end> -- or RANGE BETWEEN ...
)Standard-Frame
Wenn Sie ORDER BY, aber keinen Frame angeben, lautet der Standard:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".ROWS zählt physisch
ROWS zählt N Zeilen in der Reihenfolge der Partition, unabhängig vom Wert:
SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2. Exactly 3 rows.RANGE zählt nach Wert
RANGE zählt Zeilen, deren ORDER-BY-Wert innerhalb eines Bereichs um den aktuellen Wert liegt:
SUM(x) OVER (
ORDER BY day
RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.Warum der Unterschied wichtig ist
Wenn Lücken in den Daten vorhanden sind, liefern ROWS und RANGE unterschiedliche Ergebnisse:
-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 daysGROUPS-Frame (PG 11+)
GROUPS zählt Peer-Gruppen (gleiche Werte bei ORDER BY) statt einzelner Zeilen:
SUM(x) OVER (
ORDER BY tier
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.Frame-Grenzen
UNBOUNDED PRECEDING— erste Zeile der Partitionn PRECEDINGCURRENT ROWn FOLLOWINGUNBOUNDED FOLLOWING— letzte Zeile
Laufende Summe
Von Anfang bis zur aktuellen Zeile summieren:
SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.Nachlaufendes Fenster
Der gleitende Durchschnitt der letzten N Tage:
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7dZentriertes Fenster
In beide Richtungen betrachten:
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7dÜberraschung bei LAST_VALUE
LAST_VALUE mit dem Standard-Frame gibt die aktuelle Zeile zurück, nicht die letzte Zeile der Partition. Verwenden Sie stattdessen einen expliziten unbeschränkten Frame:
LAST_VALUE(name) OVER (
PARTITION BY group ORDER BY day
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)EXCLUDE-Klausel (PG 11+)
Bestimmte Zeilen im Frame überspringen:
SUM(x) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.Zusammenfassung
Frame-Klauseln ermöglichen eine präzise Steuerung von Fenstern.
- ROWS — physische Zeilenanzahl
- RANGE — wertbasierter Bereich
- GROUPS — Peer-Gruppen
- Der Standard-Frame kann unerwartet sein — geben Sie ihn ausdrücklich an
Schnelltest
Sie haben tägliche Umsätze mit fehlenden Tagen. Welcher Frame liefert „alle Zeilen innerhalb der 7 Kalendertage vor jetzt“?
Häufig gestellte Fragen
Ist die Lektion „Frame-Klauseln: ROWS vs. RANGE“ kostenlos?
Ja — der vollständige Text von „Frame-Klauseln: ROWS vs. RANGE“ 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 Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Frame-Klauseln: ROWS vs. RANGE“?
Wählen Sie zwischen den Frame-Klauseln ROWS BETWEEN und RANGE BETWEEN und verstehen Sie, wie beide mit Duplikaten und Lücken umgehen. Du übst SQL Academy 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 Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy 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 „Frame-Klauseln: ROWS vs. RANGE“?
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 Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-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
- Frame-Klauseln: ROWS vs. RANGE
- Lag/Lead mit Frame-Fenstern
- Bucketing mit NTILE und Cume_Dist
- Praxisnahe Muster für Berichte