Todos los términos del glosario

Funciones de ventana

¿Qué son las funciones de ventana en PostgreSQL?

Una función de ventana calcula un valor sobre un conjunto de filas relacionadas, como una posición en un ranking o un total acumulado, sin combinar esas filas en una sola como hace GROUP BY.

Una función de ventana realiza un cálculo sobre un conjunto de filas relacionadas con la fila actual, definido por una cláusula OVER. A diferencia de un agregado con GROUP BY, cada fila de entrada permanece en la salida y obtiene su propio resultado.

PARTITION BY divide las filas en grupos, y ORDER BY establece el orden dentro de cada grupo. Entre las funciones de ventana integradas están row_number, rank, dense_rank, lag, lead y first_value, y cualquier agregado común, como sum o avg, puede usarse con OVER. Las funciones de ventana solo se permiten en la lista del SELECT y en la cláusula ORDER BY de una consulta.

Ejemplo

El ejemplo clasifica a los jugadores dentro de su equipo y muestra los puntos totales del equipo junto a cada fila.

CREATE TABLE scores (player text, team text, points int);
INSERT INTO scores VALUES
  ('ana', 'red', 30), ('ben', 'red', 25), ('cy', 'blue', 40), ('dee', 'blue', 35);

SELECT player, team, points,
       rank() OVER (PARTITION BY team ORDER BY points DESC) AS team_rank,
       sum(points) OVER (PARTITION BY team) AS team_total
FROM scores
ORDER BY team, team_rank;

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados