web-dev-qa-db-de.com

OVER-Klausel in Oracle

Was bedeutet die OVER-Klausel in Oracle?

67
paweloque

Die OVER-Klausel gibt die Partitionierung, die Reihenfolge und das Fenster an, in dem die Analysefunktion ausgeführt wird.

So wird beispielsweise ein gleitender Durchschnitt berechnet:

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 funktioniert über ein bewegliches Fenster (3 Zeilen breit) über den Zeilen, sortiert nach Datum.

Dies berechnet einen laufenden Saldo:

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 wird über ein Fenster ausgeführt, das die aktuelle Zeile und alle vorherigen Zeilen enthält.

Dies berechnet das Maximum separat für jede "Abteilung":

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 wird über ein Fenster ausgeführt, das alle Zeilen für eine bestimmte Abteilung enthält.

SQL Fiddle: http://sqlfiddle.com/#!4/9eecb7d/122

74
Jeffrey Kemp

Sie können damit einige Aggregatfunktionen in analytische Funktionen umwandeln:

SELECT  MAX(date)
FROM    mytable

wird zurückkehren 1 Zeile mit einem einzelnen Maximum,

SELECT  MAX(date) OVER (ORDER BY id)
FROM    mytable

gibt alle Zeilen mit einem laufenden Maximum zurück.

27
Quassnoi

Es ist Teil der Oracle-Analysefunktionen .

18
cletus