SQL analítico · funciones de ventana

PARTITION BY

Divide las filas en grupos de cálculo dentro de una ventana sin convertir cada grupo en una sola fila.

Lectura: 5–7 minEjemplo comprobadoPráctica con ventanas
Contenido de esta guía

Qué significa PARTITION BY

PARTITION BY forma grupos dentro de la cláusula OVER. Para cada fila, la función de ventana trabaja con las filas que comparten los mismos valores de partición.

A diferencia de GROUP BY, no reduce cada grupo a una única fila. El detalle original sigue visible junto con el promedio, total, posición u otra medida calculada para su grupo.

Estructura básica

Función de ventana
funcion(...) OVER (
  PARTITION BY columna_grupo
  ORDER BY columna_orden
)

PARTITION BY decide dónde se reinicia el cálculo. El ORDER BY interno decide el orden dentro de cada partición cuando la función lo necesita. El ORDER BY final de la consulta sigue siendo el responsable de ordenar la salida.

Ejemplo guiado: promedio por departamento

SQL
SELECT departamento,
       nombre,
       salario,
       ROUND(AVG(salario) OVER (
         PARTITION BY departamento
       ), 2) AS promedio_departamento
FROM empleados
WHERE departamento IN ('Marketing', 'Tecnología')
ORDER BY departamento, salario DESC;
Resultado comprobado con la base educativa
departamentonombresalariopromedio_departamento
MarketingGonzalo Nieto3150030750
MarketingHelena Costa3000030750
TecnologíaCarlos Peña4600042500
TecnologíaDiana León3900042500

Cada empleado conserva su fila. El promedio se repite en todas las filas del mismo departamento porque se calcula sobre esa partición.

No es particionamiento físico de tablas. Aquí PARTITION BY solo organiza las filas disponibles para una función de ventana durante la consulta.

Errores frecuentes

Esperar que PARTITION BY ordene el resultado

El orden dentro de OVER define cómo trabaja la función, pero no garantiza por sí solo el orden final de las filas. Añade un ORDER BY al final de la consulta cuando el orden de presentación importe.

También debes distinguir la partición del marco de ventana: algunas funciones agregadas con un ORDER BY interno calculan un acumulado hasta la fila actual, no el total completo de la partición.

Comprueba lo aprendido

Intermedia · ranking por grupo

Numera los salarios de cada departamento

Muestra departamento, nombre, salario y una columna posicion. La persona con mayor salario de cada departamento debe recibir el número 1.

Compatibilidad entre motores

Las funciones de ventana están disponibles en PostgreSQL, SQL Server y Oracle, en MySQL 8.0 o posterior y en SQLite 3.25 o posterior. El conjunto de funciones, las opciones de marco y el tratamiento de NULL pueden variar. Si una consulta se destina a varias versiones, comprueba la documentación concreta del motor.

Qué debes recordar

  • PARTITION BY crea grupos de cálculo sin colapsar filas.
  • Se escribe dentro de OVER.
  • El orden interno de la ventana y el orden final cumplen funciones distintas.
  • Una partición y un marco de ventana no son exactamente lo mismo.

Conceptos relacionados

Fuentes técnicas consultadas