Saltar al contenido

Cláusula OVER en Oracle

Sé libre de compartir nuestro espacio y códigos con otro, danos de tu ayuda para ampliar esta comunidad.

Solución:

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

Ejemplo #1: calcular un promedio 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 #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 un OVER cláusula que especifica un género ORDERla ventana predeterminada es UNBOUNDED PRECEDING para CURRENT ROWpor lo que la expresión anterior se puede simplificar a, con el mismo resultado:

SUM(amt) OVER (ORDER BY date)

Ejemplo #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

Puede usarlo para transformar algunas funciones agregadas en analíticas:

SELECT  MAX(date)
FROM    mytable

regresará 1 fila con un solo máximo,

SELECT  MAX(date) OVER (ORDER BY id)
FROM    mytable

devolverá todas las filas con un máximo acumulado.

Es parte de las funciones analíticas de Oracle.

Reseñas y calificaciones del post

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *