Над предложением в Oracle


Что означает предложение OVER в Oracle?

3 60

3 ответа:

предложение 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:http://sqlfiddle.com/#! 4 / 9eecb7d/122

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

SELECT  MAX(date)
FROM    mytable

вернутся 1 строка с одним максимумом,

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

вернет все строки с максимальной.