ROWS- & RANGE-Kriterium
Teil des Abschnitts Grundlagen der SQL-Journey von Coddy. Lektion 69 von 72.
Bis jetzt können wir bei der Auswahl, wie viele Zeilen davor oder danach berücksichtigt werden sollen, nicht flexibel sein. Jetzt ist dies mit den Kriterien ROWS & RANGE möglich. 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 Kriterium ROWS die Werte nicht berücksichtigt, sondern nur die Positionen, während RANGE das Fenster anhand von Wertebereichen statt von Zeilenpositionen definiert.
Für RANGE müssen wir ORDER BY --column_name-- angeben, denn andernfalls wüsste es nicht, wie das Fenster ausgewählt werden soll.
Zum Beispiel:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGHier wird ein Fenster erstellt, das die aktuelle Zeile, die Zeile davor und die Zeile danach umfasst.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsHier wird für jedes levels (aufsteigend sortiert) ein Fenster erstellt, das die aktuelle Ebene, eine Ebene davor und eine Ebene danach umfasst. Wenn die aktuelle Ebene 5 ist, umfasst es die Ebenen 4, 5 und 6.
Hinweis: Die Verwendung von RANGE BETWEEN kann dazu führen, dass mehr Zeilen in dein Fenster aufgenommen werden, da sie alle Zeilen einschließt, die dieselben Werte wie diejenigen im Bereich haben, während ROWS BETWEEN immer dieselbe Anzahl von Zeilen einschließt (sofern sie im Datensatz verfügbar sind).
Außerdem unterstützt RANGE keine Datumsspalten.
Hier ist ein einfaches Beispiel zur Veranschaulichung von ROWS im Vergleich zu RANGE:
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:
newspapers:date,num_newspapers
Für diese Herausforderung haben wir Zeitungen für die Produktion. Wir möchten die durchschnittliche Anzahl der Zeitungen ermitteln, die zwei Tage vor der aktuellen Zeile und einen Tag danach gedruckt wurden. Außerdem möchten wir die Differenz zwischen der maximalen und der minimalen Anzahl der gedruckten Zeitungen vom aktuellen Datum und den drei davorliegenden Tagen ermitteln. Nenne diese Spalten jeweils avg_newspapers und diff_newspapers.
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
4Weitere Schlüsselwörter
Das IN-SchlüsselwortDas BETWEEN-SchlüsselwortDas LIKE-SchlüsselwortDas AS-SchlüsselwortRückblick – Handymodelle7Datumsangaben
Datumsangaben behandeln – Teil 1Datumsangaben behandeln – Teil 2Datumsangaben behandeln – Teil 32Bedingungen
Grundlagen der BedingungenDas Schlüsselwort ANDDas Schlüsselwort ORDas Schlüsselwort NOTMehrere kombinierte BedingungenKlammernBoolesche Werte5Arithmetische Operationen
Mathematische OperatorenMathematische SpaltenDie Modulo-OperationDie ROUND()-Funktion3Spezifisches Rückgabeformat
NULL-WerteErgebnisse sortieren Teil 1Ergebnisse sortieren Teil 2Zusammenfassung - Cyber Security FirmAnzahl der Datensätze begrenzenZusammenfassung - Vehicle Factory6Einführungsaufgaben
Wiederholung – ParlamentswahlWiederholung – Festnahme eines Straftäters durch die PolizeiWiederholung – Getränkebehälter an der BarWiederholung – Neue Spalten erstellen9Mehrere Tabellen
Grundlegender Join Teil 1Grundlegender Join Teil 2Rückblick – JoinSelf-JoinRückblick – Self-JoinUnionAbfragen vereinfachen, WITH-SchlüsselwortRückblick – WITH-AbfragenRückblick – Immobilienauftragnehmer12Fensterfunktionen Teil 2
RANK- & DENSE_RANK-FunktionenWiederholung – RANK & DENSE_RANKNTILE-FunktionAggregationsfunktionenROWS- & RANGE-KriteriumÜbe selbstständig: SQL-Playground