cláusula OVER no Oracle
-
11-09-2019 - |
Pergunta
O que é o significado da cláusula OVER no Oracle?
Solução
A cláusula OVER especifica o particionamento, ordenação & janela "sobre o qual" a função analítica opera.
Por exemplo, este calcula uma média móvel:
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
Ela opera através de uma janela móvel (3 linhas de largura) sobre as linhas, ordenados por data.
Este calcula um equilíbrio em execução:
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
Ele opera sobre uma janela que inclui a linha atual e todas as linhas anteriores.
Este calcula o máximo, separadamente para cada "departamento":
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
Ele opera sobre uma janela que inclui todas as linhas para um departamento específico.
SQL Fiddle: http://sqlfiddle.com/#!4/9eecb7d/122
Outras dicas
Você pode usá-lo para transformar algumas funções agregadas em analítica:
SELECT MAX(date)
FROM mytable
retornará linha 1
com um único máximo,
SELECT MAX(date) OVER (ORDER BY id)
FROM mytable
retornará todas as linhas com um máximo em execução.
É parte das da Oracle funções analíticas .