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

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

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 Fiddle:http://sqlfiddle.com#!4 / 9eecb7d/122


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

SELECT  MAX(date)
FROM    mytable

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

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

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