Saltar al contenido principal
Avanzado
20 min de lectura

Window Functions

Funciones que realizan cálculos sobre un conjunto de filas relacionadas

Las Window Functions realizan cálculos a través de un conjunto de filas relacionadas con la fila actual, sin agrupar los resultados.

Sintaxis

sql
1función_ventana() OVER (2    [PARTITION BY columna]3    [ORDER BY columna]4    [ROWS o RANGE entre frames]5)

Funciones principales

#

ROW_NUMBER, RANK, DENSE_RANK

sql
1SELECT 2    nombre,3    salario,4    ROW_NUMBER() OVER (ORDER BY salario DESC) as fila,5    RANK() OVER (ORDER BY salario DESC) as ranking,6    DENSE_RANK() OVER (ORDER BY salario DESC) as ranking_denso7FROM empleados;

#

LAG y LEAD

sql
1SELECT 2    fecha,3    total,4    LAG(total) OVER (ORDER BY fecha) as dia_anterior,5    total - LAG(total) OVER (ORDER BY fecha) as diferencia6FROM ventas_diarias;

#

SUM, AVG con ventana

sql
1SELECT 2    fecha,3    total,4    SUM(total) OVER (ORDER BY fecha) as acumulado,5    AVG(total) OVER (ORDER BY fecha ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as media_movil_7d6FROM ventas_diarias;

Sintaxis

Sintaxis
sql
1función() OVER (PARTITION BY columna ORDER BY columna)

Ejemplos

Ranking de empleados

Ranking de salarios por departamento

Ejemplo
sql
1SELECT nombre, departamento, salario,2    RANK() OVER (PARTITION BY departamento ORDER BY salario DESC) as ranking3FROM empleados4ORDER BY departamento, ranking;

Resultado:

| nombre  | departamento | salario | ranking |
|---------|-------------|---------|---------|
| Ana     | Ventas      | 50000   | 1       |
| Carlos  | Ventas      | 45000   | 2       |
| María   | IT          | 60000   | 1       |
| Pedro   | IT          | 55000   | 2       |