Funciones de ventana proporcionan la capacidad de realizar cálculos en conjuntos de filas que están relacionadas con la fila de consulta actual. Consulte la Sección 3.5 para obtener una introducción a esta función y la Sección 4.2.8 para obtener detalles sobre la sintaxis.

Las funciones de la ventana incorporadas se enumeran en la Tabla 9.60. Tenga en cuenta que estas funciones debe ser invocado usando la sintaxis de la función de ventana, es decir, una OVER Se requiere una cláusula.

Además de estas funciones, cualquier agregado ordinario incorporado o definido por el usuario (es decir, agregados no de conjuntos ordenados o conjuntos hipotéticos) se puede utilizar como función de ventana; consulte la Sección 9.21 para obtener una lista de los agregados incorporados. Las funciones agregadas actúan como funciones de ventana solo cuando un OVER la cláusula sigue a la llamada; de lo contrario, actúan como agregados simples y devuelven una sola fila para todo el conjunto.

Cuadro 9.60. Funciones de ventana de uso general

Función

Descripción

row_number () → bigint

Devuelve el número de la fila actual dentro de su partición, contando desde 1.

rank () → bigint

Devuelve el rango de la fila actual, con espacios; eso es el row_number de la primera fila en su grupo de pares.

dense_rank () → bigint

Devuelve el rango de la fila actual, sin espacios; esta función cuenta efectivamente los grupos de pares.

percent_rank () → double precision

Devuelve el rango relativo de la fila actual, es decir (rank – 1) / (filas de partición totales – 1). Por tanto, el valor varía de 0 a 1 inclusive.

cume_dist () → double precision

Devuelve la distribución acumulativa, es decir (número de filas de partición anteriores o pares con fila actual) / (filas de partición totales). Por tanto, el valor oscila entre 1 /N a 1.

ntile ( num_bucketsinteger ) → integer

Devuelve un número entero que va desde 1 hasta el valor del argumento, dividiendo la partición lo más equitativamente posible.

lag ( valueanyelement [, offsetinteger [, defaultanyelement ]]) → anyelement

Devoluciones value evaluado en la fila que es offset filas antes de la fila actual dentro de la partición; si no existe tal fila, en su lugar devuelve default (que debe ser del mismo tipo que value). Ambos offset y default se evalúan con respecto a la fila actual. Si se omite, offset por defecto es 1 y default para NULL.

lead ( valueanyelement [, offsetinteger [, defaultanyelement ]]) → anyelement

Devoluciones value evaluado en la fila que es offset filas después de la fila actual dentro de la partición; si no existe tal fila, en su lugar devuelve default (que debe ser del mismo tipo que value). Ambos offset y default se evalúan con respecto a la fila actual. Si se omite, offset por defecto es 1 y default para NULL.

first_value ( valueanyelement ) → anyelement

Devoluciones value evaluado en la fila que es la primera fila del marco de la ventana.

last_value ( valueanyelement ) → anyelement

Devoluciones value evaluado en la fila que es la última fila del marco de la ventana.

nth_value ( valueanyelement, ninteger ) → anyelement

Devoluciones value evaluado en la fila que es el n‘th fila del marco de la ventana (contando desde 1); devoluciones NULL si no existe tal fila.

Todas las funciones enumeradas en la Tabla 9.60 dependen del orden de clasificación especificado por el ORDER BY cláusula de la definición de ventana asociada. Filas que no son distintas al considerar solo el ORDER BY se dice que las columnas son compañeros. Las cuatro funciones de clasificación (incluidas cume_dist) se definen de modo que den la misma respuesta para todas las filas de un grupo de pares.

Tenga en cuenta que first_value, last_value, y nth_value considere solo las filas dentro del marco de la ventana, que por defecto contiene las filas desde el inicio de la partición hasta el último par de la fila actual. Es probable que esto dé resultados inútiles para last_value y a veces también nth_value. Puede redefinir el marco agregando una especificación de marco adecuada (RANGE, ROWS o GROUPS) al OVER cláusula. Consulte la Sección 4.2.8 para obtener más información sobre las especificaciones del marco.

Cuando una función agregada se utiliza como función de ventana, se agrega sobre las filas dentro del marco de la ventana de la fila actual. Un agregado usado con ORDER BY y la definición de marco de ventana predeterminada produce una suma corriente tipo de comportamiento, que puede ser o no lo que se desea. Para obtener agregación en toda la partición, omita ORDER BY o usar ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Se pueden utilizar otras especificaciones de marco para obtener otros efectos.

Nota

El estándar SQL define un RESPECT NULLS o IGNORE NULLS opción para lead, lag, first_value, last_value, y nth_value. Esto no está implementado en PostgreSQL: el comportamiento es siempre el mismo que el estándar por defecto, es decir RESPECT NULLS. Asimismo, el estándar FROM FIRST o FROM LAST opción para nth_value no está implementado: solo el predeterminado FROM FIRST el comportamiento es compatible. (Puede lograr el resultado de FROM LAST invirtiendo el ORDER BY ordenar.)

Anterior Hasta próximo
9.21. Funciones agregadas Hogar 9.23. Expresiones de subconsultas