Totales acumulados y medias móviles
Calcule sumas acumuladas y medias móviles con SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...).
Totales acumulados y medias móviles es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 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.
Conceptos básicos del total acumulado
Un total acumulado es un SUM con ORDER BY en la ventana y sin una cláusula de marco, por lo que el marco predeterminado es «desde el principio hasta la fila actual»:
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Total acumulado por grupo
Reinicie el total acumulado para cada usuario:
SELECT id, user_id, total,
SUM(total) OVER (
PARTITION BY user_id ORDER BY created_at
) AS user_running_total
FROM orders;Media móvil
Una media móvil de N días utiliza un marco ROWS:
SELECT day, revenue,
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d
FROM daily_revenue;Media móvil centrada
Ventana centrada de 7 días (3 anteriores, la actual y 3 posteriores):
SELECT day, revenue,
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS avg_7d_centred
FROM daily_revenue;Distribución acumulada
¿Qué fracción de los ingresos totales hemos alcanzado en cada día?
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day)
/ SUM(revenue) OVER () AS cum_share
FROM daily_revenue;ROWS frente a RANGE
ROWS— cuenta las filas físicamente (N filas antes o después)RANGE— abarca valores lógicamente (por ejemplo, 7 días basados en el valor de la fecha)
-- ROWS: 6 previous rows + this one (may skip dates with no data)
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
-- RANGE: include any row with a day within '6 days' of the current row
AVG(revenue) OVER (ORDER BY day RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)Máximo acumulado
El mejor resultado alcanzado hasta cada punto:
SELECT day, total_users,
MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;Recuento acumulado
Total de eventos observados hasta esta fila:
SELECT id, ts,
COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;Detectar anomalías
Compare los ingresos de hoy con la línea base móvil:
SELECT day, revenue, avg_7d,
CASE WHEN revenue < 0.5 * avg_7d THEN 'WARNING' ELSE 'OK' END AS status
FROM (
SELECT day, revenue,
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS avg_7d
FROM daily_revenue
) sub;NULL iniciales
Con una ventana de 7 filas, las primeras 6 tienen promedios NULL o parciales. Decida si quiere ocultarlas o considerar válidas las ventanas parciales.
Rendimiento
Los agregados acumulados necesitan datos de entrada ordenados según la partición. Un índice sobre la columna de ORDER BY evita la ordenación.
Resumen
Los marcos permiten realizar cálculos acumulados.
- Marco predeterminado con ORDER BY = «desde el inicio hasta la fila actual»
ROWS BETWEEN n PRECEDING AND CURRENT ROW= ventana móvil- SUM/AVG/MAX sobre ventanas = valores acumulados o móviles
Comprobación rápida
¿Qué cláusula de marco proporciona una media móvil de 7 días hasta la fila actual?
Preguntas frecuentes
¿La lección «Totales acumulados y medias móviles» es gratis?
Sí — el texto completo de «Totales acumulados y medias móviles» 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 «Totales acumulados y medias móviles»?
Calcule sumas acumuladas y medias móviles con SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...). 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 4 de 4.
¿Cuánto tiempo toma la lección «Totales acumulados y medias móviles»?
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