0Pricing
SQL Academy · Lektion

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 days

GROUPS-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 Partition
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED 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_7d

Zentriertes 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

  1. Frame-Klauseln: ROWS vs. RANGE
  2. Lag/Lead mit Frame-Fenstern
  3. Bucketing mit NTILE und Cume_Dist
  4. Praxisnahe Muster für Berichte
← Zurück zu SQL Academy