O
OVER
A cláusula especifica o particionamento, a ordenação e a janela "sobre a qual" a função analítica opera. Exemplo nº 1:calcule 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
Ele opera sobre uma janela móvel (3 linhas de largura) sobre as linhas, ordenadas por data.
Exemplo nº 2:calcule um saldo 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 em uma janela que inclui a linha atual e todas as linhas anteriores.
Nota:para um agregado com um
OVER
cláusula especificando uma classificação ORDER
, a janela padrão é UNBOUNDED PRECEDING
para CURRENT ROW
, então a expressão acima pode ser simplificada para, com o mesmo resultado:SUM(amt) OVER (ORDER BY date)
Exemplo nº 3:calcule o máximo dentro de cada grupo
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 em uma janela que inclui todas as linhas de um determinado departamento.
SQL Fiddle:http://sqlfiddle.com/#!4/9eecb7d/122