В чем смысл предложения OVER в Oracle?
Предложение OVER в Oracle
Ответ 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
вернет все строки с максимальным пробегом.
Ответ 3
Это часть аналитических функций Oracle.