Oracle
 sql >> Datenbank >  >> RDS >> Oracle

OVER-Klausel in Oracle

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