sql >> Base de Datos >  >> RDS >> Oracle

Cláusula OVER en Oracle

El OVER La cláusula especifica la partición, el orden y la ventana "sobre los cuales" opera la función analítica.

Ejemplo n.º 1:calcular una media móvil

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

Opera sobre una ventana móvil (3 filas de ancho) sobre las filas, ordenadas por fecha.

Ejemplo n.º 2:calcular un saldo corriente

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

Opera sobre una ventana que incluye la fila actual y todas las filas anteriores.

Nota:para un agregado con OVER cláusula que especifica un tipo ORDER , la ventana predeterminada es UNBOUNDED PRECEDING a CURRENT ROW , por lo que la expresión anterior se puede simplificar a, con el mismo resultado:

SUM(amt) OVER (ORDER BY date)

Ejemplo n.º 3:calcular el 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

Opera sobre una ventana que incluye todas las filas de un departamento en particular.

Violín SQL:http://sqlfiddle.com/#!4/9eecb7d/122