Puedes ejecutar cualquier Window Function en nuestra consola interactiva: Abrir consola SQL →
Window Functions en SQL: análisis avanzado de datos
Las Window Functions permiten realizar cálculos avanzados sin agrupar filas. Son esenciales para análisis profesional: rankings, acumulados, promedios móviles, comparaciones entre filas y más.
Tabla de contenidos
1. ¿Qué son las Window Functions?
Son funciones que calculan valores sobre un conjunto de filas relacionadas, sin agruparlas. Cada fila conserva su identidad.
SELECT nombre, precio,
AVG(precio) OVER() AS promedio_global
FROM productos;
2. La cláusula OVER()
OVER() define el conjunto de filas sobre el que opera la función ventana.
SELECT nombre, precio,
AVG(precio) OVER(PARTITION BY categoria)
FROM productos;
3. RANK, DENSE_RANK y ROW_NUMBER
SELECT nombre, precio,
ROW_NUMBER() OVER(ORDER BY precio DESC) AS fila,
RANK() OVER(ORDER BY precio DESC) AS ranking,
DENSE_RANK() OVER(ORDER BY precio DESC) AS ranking_denso
FROM productos;
4. SUM, AVG, MIN, MAX como funciones ventana
SELECT fecha, ventas,
SUM(ventas) OVER(ORDER BY fecha) AS acumulado
FROM ventas_diarias;
5. LAG y LEAD
Permiten acceder a filas anteriores o siguientes.
SELECT fecha, ventas,
LAG(ventas, 1) OVER(ORDER BY fecha) AS ventas_ayer,
LEAD(ventas, 1) OVER(ORDER BY fecha) AS ventas_manana
FROM ventas_diarias;
6. Frames: ROWS y RANGE
SELECT fecha, ventas,
AVG(ventas) OVER(
ORDER BY fecha
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS promedio_7_dias
FROM ventas_diarias;
7. Ejemplos prácticos
-- Ranking por ventas
SELECT vendedor, ventas,
RANK() OVER(ORDER BY ventas DESC) AS ranking
FROM vendedores;
-- Comparación con la fila anterior
SELECT fecha, visitas,
visitas - LAG(visitas) OVER(ORDER BY fecha) AS diferencia
FROM visitas_web;
-- Acumulado por categoría
SELECT categoria, producto, ventas,
SUM(ventas) OVER(PARTITION BY categoria ORDER BY producto)
FROM productos;
8. Ejercicios para practicar
- Genera un ranking de productos por precio.
- Calcula un acumulado de ventas por fecha.
- Usa LAG para comparar ventas con el día anterior.
- Calcula un promedio móvil de 7 días.
- Explica para qué sirven las Window Functions.
SELECT nombre, precio,
RANK() OVER(ORDER BY precio DESC)
FROM productos;
SELECT fecha, ventas,
SUM(ventas) OVER(ORDER BY fecha)
FROM ventas_diarias;
SELECT fecha, ventas,
LAG(ventas) OVER(ORDER BY fecha)
FROM ventas_diarias;
SELECT fecha, ventas,
AVG(ventas) OVER(
ORDER BY fecha
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
)
FROM ventas_diarias;
-- Sirven para análisis avanzado sin agrupar filas.
9. Mini‑proyecto: Ranking y análisis temporal
SELECT vendedor, ventas,
RANK() OVER(ORDER BY ventas DESC) AS ranking,
ventas - LAG(ventas) OVER(ORDER BY ventas DESC) AS diferencia
FROM vendedores;
10. Errores comunes
- No usar ORDER BY dentro de OVER().
- Confundir PARTITION BY con GROUP BY.
- Usar frames incorrectos.
- Olvidar alias en funciones complejas.
11. Preguntas frecuentes
¿Las Window Functions reemplazan GROUP BY?
No, son complementarias.
¿Son compatibles con todas las bases de datos?
Sí, en todas las modernas.