Над предложением в 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:http://sqlfiddle.com/#! 4 / 9eecb7d/122
вы можете использовать его для преобразования некоторых агрегатных функций в аналитические:
SELECT MAX(date) FROM mytable
вернутся
1
строка с одним максимумом,SELECT MAX(date) OVER (ORDER BY id) FROM mytable
вернет все строки с максимальной.
Это часть аналитические функции Oracle.