OVER
Клаузата определя разделянето, подреждането и прозореца, "над който" оперира аналитичната функция.
Пример №1:изчислете пълзяща средна
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
Работи върху движещ се прозорец (широчина 3 реда) над редовете, подредени по дата.
Пример №2:изчисляване на текущ баланс
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
Той работи в прозорец, който включва текущия ред и всички предишни редове.
Забележка:за агрегат с OVER
клауза, указваща сортиране ORDER
, прозорецът по подразбиране е UNBOUNDED PRECEDING
към CURRENT ROW
, така че горният израз може да бъде опростен до, със същия резултат:
SUM(amt) OVER (ORDER BY date)
Пример №3:изчислете максимума във всяка група
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
Работи върху прозорец, който включва всички редове за конкретен отдел.
SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122