IOKELU
Nivel: Avanzado
💡 Prueba las consultas:
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.

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

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

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.


Siguiente guía

SQL Avanzado – PARTITION BY →