Uso de la cláusula OVER
Ya ha aprendido que las funciones de ventana requieren la cláusula OVER para crear y manipular ventanas. La cláusula OVER define las filas a las que se aplica la función de ventana. Puede ser todas las filas o un subconjunto de las filas. También puede definir el orden de las filas de una función de ventana.
Puede utilizar la cláusula OVER con funciones para calcular valores agregados tales como medias móviles, agregados acumulados, totales acumulados o N elementos superiores por resultados del grupo.
La cláusula OVER puede adoptar los argumentos siguientes:
- PARTITION BY : divide el conjunto de resultados de la consulta en diferentes partes.
- ORDER BY : define el orden lógico de las filas del conjunto de resultados.
- ROWS/RANGE : limita las filas especificando los puntos inicial y final. Esto requiere el argumento ORDER BY y el valor predeterminado es desde el principio de la partición hasta el elemento actual.
Si no especifica un argumento para la cláusula OVER, las funciones de ventana se aplicarán en todo el conjunto de resultados.
En el diagrama siguiente se muestra la relación entre SELECT, OVER y PARTITION BY:
PARTICIÓN POR
La cláusula PARTITION BY divide el conjunto de resultados en particiones antes de aplicar la función de ventana. Si no se especifica PARTITION BY, la función window se aplica a todas las filas de la consulta. Las particiones usan una de las columnas disponibles en la cláusula FROM.
ORDENAR POR
ORDER BY define el orden lógico de las filas dentro de cada partición. Por ejemplo, la función RANK requiere que se ordenan las filas para que pueda devolver la posición de clasificación de cada fila. El orden predeterminado es ASC, pero es recomendable especificar ASC o DESC después del orden por expresiones. NULL se trata como el valor más bajo posible.
Cláusulas ROWS o RANGE
Los argumentos ROW o RANGE establecen un límite de inicio y finalización alrededor de las filas en las que se opera. ROW o RANGE requiere una subcláusula ORDER BY dentro de la cláusula OVER.
La cláusula ROWS limita las filas dentro de una partición especificando un número fijo de filas anteriores o después de la fila actual.
La cláusula RANGE limita lógicamente las filas dentro de una partición especificando un intervalo de valores con respecto al valor de la fila actual.
FILA ACTUAL
Especifica que la ventana se inicia o termina en la fila actual cuando se usa con ROWS o el valor actual cuando se usa con RANGE. CURRENT ROW se puede especificar como punto inicial y final.
ENTRE Y
Se usa con ROWS o RANGE para especificar los puntos de límite inicial y final de la ventana.