Предложение 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
вернет все строки с максимальной.