ROWS & RANGE Criterion
Teil des Abschnitts Grundlagen der SQL-Journey von Coddy — Lektion 69 von 72.
Bisher konnten wir nicht flexibel wählen, wie viele Zeilen vor oder nach zu berücksichtigen sind. Jetzt ist es möglich mit ROWS & RANGE Kriterien. Um sie zu verwenden, schreiben wir:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
Und wir können die folgenden Optionen angeben:
CURRENT ROW- die aktuelle Zeilen PRECEDING- Zeilen vor der aktuellen Zeilen FOLLOWING- Zeilen nach der aktuellen Zeile
Der Unterschied zwischen ROWS & RANGE besteht darin, dass das ROWS-Kriterium keine Werte berücksichtigt, sondern nur die Positionen, während RANGE das Fenster in Bezug auf Wertebereiche statt Zeilenpositionen definiert.
Für RANGE müssen wir ORDER BY --column_name-- angeben, weil es sonst nicht wüsste, wie es das Fenster wählen soll.
Zum Beispiel:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGHier erstellt es ein Fenster, das die aktuelle Zeile, die Zeile davor und die Zeile danach enthält.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsHier erstellt es ein Fenster, das für jede Stufe (sortiert in aufsteigender Reihenfolge) die aktuelle Stufe, eine Stufe davor und eine Stufe danach enthält. Wenn die aktuelle Stufe 5 ist, enthält es die Stufen 4, 5 und 6.
Hinweis: Die Verwendung von RANGE BETWEEN kann dazu führen, dass mehr Zeilen in Ihr Fenster aufgenommen werden, da es alle Zeilen einschließt, die dieselben Werte wie jene im Bereich haben, während ROWS BETWEEN immer die gleiche Anzahl von Zeilen einschließt (solange sie im Datensatz verfügbar sind).
Auch RANGE unterstützt keine Datumsspalten.
Hier ist ein einfaches Beispiel, um ROWS vs RANGE zu veranschaulichen:
Verwendung von ROWS:
SELECT employee_name, salary,
AVG(salary) OVER (
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
) as avg_salary_rowsVerwendung von RANGE:
SELECT employee_name, salary,
AVG(salary) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) as avg_salary_rangeAufgabe
EinfachVerfügbare Tabellen und Spalten:
<strong>newspapers</strong>:<strong>date</strong>,<strong>num_newspapers</strong>
Für diese Herausforderung haben wir Daten zu produzierten Zeitungen. Wir möchten den Durchschnitt der gedruckten Zeitungen zwei Tage vor der aktuellen Zeile und einen Tag danach kennen. Außerdem möchten wir den Unterschied zwischen der maximalen und minimalen Anzahl gedruckter Zeitungen vom aktuellen Datum und allen drei Tagen davor wissen. Nennen Sie diese Spalten avg_newspapers und diff_newspapers jeweils.
Spickzettel
Verwenden Sie ROWS und RANGE, um flexible Fensterrahmen in Fensterfunktionen zu definieren:
ROWS – definiert das Fenster nach Zeilenpositionen:
OVER (ROWS BETWEEN --START-- AND --END--)RANGE – definiert das Fenster nach Wertebereichen (erfordert ORDER BY):
OVER (ORDER BY column_name RANGE BETWEEN --START-- AND --END--)Optionen für Fenstergrenzen:
CURRENT ROW– die aktuelle Zeilen PRECEDING– n Zeilen/Werte vor der aktuellenn FOLLOWING– n Zeilen/Werte nach der aktuellen
Beispiele:
-- ROWS: includes current row + 1 before + 1 after (by position)
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-- RANGE: includes values within range (by value)
ORDER BY levels
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWINGWichtige Unterschiede:
ROWS– basierend auf Zeilenpositionen, immer gleiche Anzahl von ZeilenRANGE– basierend auf Werten, kann mehr Zeilen mit gleichen Werten einschließenRANGEunterstützt keine Datumsspalten
Probier es selbst
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns9Multiple tables
Basic Join Part 1Basic Join Part 2Recap - JoinSelf joinRecap - Self JoinUnionSimplify queries, WITH keywordRecap - With QueriesRecap - Real Estate Contractor12Window Functions part 2
RANK & DENSE_RANK FunctionsRecap - RANK & DENSE_RANKNTILE FunctionAggregation FunctionsROWS & RANGE Criterion