OVER
klausul specificerar partitioneringen, ordningen och fönstret "över vilket" den analytiska funktionen fungerar.
Exempel #1:beräkna ett glidande medelvärde
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 fungerar över ett rörligt fönster (3 rader brett) över raderna, sorterade efter datum.
Exempel 2:beräkna en löpsaldo
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 fungerar över ett fönster som inkluderar den aktuella raden och alla tidigare rader.
Obs:för ett aggregat med en OVER
sats som anger en sorterings ORDER
, är standardfönstret UNBOUNDED PRECEDING
till CURRENT ROW
, så uttrycket ovan kan förenklas till, med samma resultat:
SUM(amt) OVER (ORDER BY date)
Exempel 3:beräkna maxvärdet inom varje grupp
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 fungerar över ett fönster som inkluderar alla rader för en viss avdelning.
SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122