Подтвердить что ты не робот

Предложение OVER в Oracle

В чем смысл предложения OVER в Oracle?

4b9b3361

Ответ 1

Предложение OVER указывает разделение, упорядочение и окно "над которым" работает аналитическая функция.

Например, это вычисляет скользящее среднее:

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 строки) по строкам, упорядоченным по дате.

Это вычисляет текущий баланс:

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

Он работает над окном, которое включает текущую строку и все предыдущие строки.

Это вычисляет максимум отдельно для каждого "дельта":

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

Ответ 2

Вы можете использовать его для преобразования некоторых агрегатных функций в аналитические:

SELECT  MAX(date)
FROM    mytable

возвращает строку 1 с единственным максимумом,

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

вернет все строки с максимальным пробегом.