Der OVER
-Klausel spezifiziert die Partitionierung, Reihenfolge und das Fenster, "über dem" die Analysefunktion operiert.
Beispiel 1:Berechnen Sie einen gleitenden Durchschnitt
AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
date amt avg_amt
===== ==== =======
1-Jan 10.0 10.5
2-Jan 11.0 17.0
3-Jan 30.0 17.0
4-Jan 10.0 18.0
5-Jan 14.0 12.0
Es arbeitet über ein sich bewegendes Fenster (3 Reihen breit) über den Reihen, geordnet nach Datum.
Beispiel Nr. 2:Laufende Bilanz berechnen
SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
date amt sum_amt
===== ==== =======
1-Jan 10.0 10.0
2-Jan 11.0 21.0
3-Jan 30.0 51.0
4-Jan 10.0 61.0
5-Jan 14.0 75.0
Es arbeitet über ein Fenster, das die aktuelle Zeile und alle vorherigen Zeilen enthält.
Hinweis:für ein Aggregat mit einem OVER
Klausel, die eine Sortierung ORDER
angibt , das Standardfenster ist UNBOUNDED PRECEDING
zu CURRENT ROW
, daher kann der obige Ausdruck mit demselben Ergebnis vereinfacht werden zu:
SUM(amt) OVER (ORDER BY date)
Beispiel #3:Berechnen Sie das Maximum innerhalb jeder Gruppe
MAX(amt) OVER (PARTITION BY dept)
dept amt max_amt
==== ==== =======
ACCT 5.0 7.0
ACCT 7.0 7.0
ACCT 6.0 7.0
MRKT 10.0 11.0
MRKT 11.0 11.0
SLES 2.0 2.0
Es arbeitet über ein Fenster, das alle Zeilen für eine bestimmte Abteilung enthält.
SQL-Geige:http://sqlfiddle.com/#!4/9eecb7d/122