OVER, PARTITION BY y ORDER BY
Comprenda el modelo de las funciones de ventana: OVER, PARTITION BY (agrupación), ORDER BY (ordenación) y sus diferencias con GROUP BY.
OVER, PARTITION BY y ORDER BY es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué es una función de ventana?
Una función de ventana calcula un valor sobre un conjunto de filas relacionadas con la fila actual, sin reducir el resultado como hace GROUP BY. Conserva todas las filas Y obtiene una columna agregada.
Ejemplo básico
El promedio del total de pedidos de toda la tabla, en cada fila:
SELECT id, total,
AVG(total) OVER () AS avg_total
FROM orders;Cláusula OVER
La cláusula OVER (...) define la ventana. Los paréntesis vacíos significan «todo el conjunto de resultados».
SELECT id, total,
SUM(total) OVER () AS grand_total
FROM orders;PARTITION BY: agrupar la ventana
Como GROUP BY, pero las filas no se reducen:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;
-- Every order keeps its row; user_total is the same for all of one user's orders.ORDER BY en la ventana
ORDER BY dentro de OVER define el orden de las filas para los cálculos acumulados:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;
-- Running total per user, ordered by date.Ventana frente a GROUP BY
Comparación lado a lado:
-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id)
FROM orders;Cada fila, un marco diferente
El «marco» es el conjunto de filas de la partición que examina la función. El marco predeterminado con ORDER BY es «desde el principio hasta la fila actual»; eso es lo que produce los totales acumulados.
Ventanas con nombre
Si varias funciones comparten una ventana, asígnele un nombre una sola vez:
SELECT id, user_id, total,
SUM(total) OVER w AS running_sum,
AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);La mayoría de los agregados funcionan como funciones de ventana
COUNT, SUM, AVG, MIN, MAX: todas se pueden usar sobre una ventana. Las funciones de ventana especializadas añaden ROW_NUMBER, RANK, LAG/LEAD, NTILE, etc.
Las funciones de ventana se ejecutan después de WHERE
Orden lógico: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. Por tanto, WHERE filtra antes de que se calculen las ventanas.
Consideraciones de rendimiento
Las funciones de ventana requieren ordenar los datos (o usar un hash). Para particiones grandes, un índice sobre las columnas (partición, orden) evita el paso de ordenación.
Resumen
Las funciones de ventana añaden valores agregados por fila.
- OVER () = todo el resultado
- PARTITION BY = agrupar la ventana
- ORDER BY en la ventana = habilitar cálculos acumulados
Comprobación rápida
¿Qué calcula SUM(x) OVER (PARTITION BY user_id)?
Preguntas frecuentes
¿La lección «OVER, PARTITION BY y ORDER BY» es gratis?
Sí — el texto completo de «OVER, PARTITION BY y ORDER BY» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «OVER, PARTITION BY y ORDER BY»?
Comprenda el modelo de las funciones de ventana: OVER, PARTITION BY (agrupación), ORDER BY (ordenación) y sus diferencias con GROUP BY. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «OVER, PARTITION BY y ORDER BY»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- OVER, PARTITION BY y ORDER BY
- ROW_NUMBER, RANK y DENSE_RANK
- LAG, LEAD y patrones de series temporales
- Totales acumulados y medias móviles