Tema SQL
Funciones de ventana (OVER)
ROW_NUMBER, RANK, SUM/AVG OVER, LAG/LEAD sin colapsar filas.
Descripción
OVER (PARTITION BY … ORDER BY …) define una ventana por fila. Permite rankings, acumulados y comparación con fila anterior/siguiente (manual §18).
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
función() OVER (
[ PARTITION BY col ... ]
ORDER BY col ...
)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- PARTITION BY
- Reinicia la ventana por grupo.
- ORDER BY
- Orden dentro de la ventana para ROW_NUMBER, LAG, etc.
Ejemplos
Ejemplo 1
SELECT nombre, departamento_id, salario,
ROW_NUMBER() OVER (
PARTITION BY departamento_id
ORDER BY salario DESC
) AS pos
FROM empleados;
Ejemplo 2
SELECT total, SUM(total) OVER (ORDER BY fecha) AS acum FROM ventas;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.