OVER
klausul specificerer partitioneringen, rækkefølgen og vinduet "over hvilket" den analytiske funktion fungerer.
Eksempel #1:Beregn et glidende gennemsnit
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
Den fungerer over et bevægeligt vindue (3 rækker bredt) over rækkerne, sorteret efter dato.
Eksempel #2:Beregn en løbende balance
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
Det fungerer over et vindue, der inkluderer den aktuelle række og alle tidligere rækker.
Bemærk:for et aggregat med en OVER
klausul, der specificerer en sorterings ORDER
, standardvinduet er UNBOUNDED PRECEDING
til CURRENT ROW
, så ovenstående udtryk kan forenkles til, med samme resultat:
SUM(amt) OVER (ORDER BY date)
Eksempel #3:beregn maksimum inden for hver 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
Det fungerer over et vindue, der inkluderer alle rækker for en bestemt afd.
SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122