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