Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Cláusula OVER no Oracle


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