Totais acumulados e médias móveis
Calcule somas acumuladas e médias móveis com SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...).
Totais acumulados e médias móveis é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Noções Básicas de Total Cumulativo
Um total cumulativo é um SUM com ORDER BY na janela — e sem uma cláusula de quadro, portanto o quadro padrão é "do início até a linha atual":
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Total Cumulativo por Grupo
Reinicie o total cumulativo para cada usuário:
SELECT id, user_id, total,
SUM(total) OVER (
PARTITION BY user_id ORDER BY created_at
) AS user_running_total
FROM orders;Média Móvel
Uma média móvel de N dias usa um quadro ROWS:
SELECT day, revenue,
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d
FROM daily_revenue;Média Móvel Centralizada
Janela centralizada de 7 dias (3 anteriores, a atual, 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;Distribuição Cumulativa
Que fração da receita total alcançamos até cada dia?
SELECT day, revenue,
SUM(revenue) OVER (ORDER BY day)
/ SUM(revenue) OVER () AS cum_share
FROM daily_revenue;ROWS vs RANGE
ROWS— conta as linhas fisicamente (N linhas antes/depois)RANGE— abrange valores logicamente (por exemplo, 7 dias com base no valor da data)
-- 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 Cumulativo
O melhor resultado obtido até cada ponto:
SELECT day, total_users,
MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;Contagem Cumulativa
Total de eventos observados até esta linha:
SELECT id, ts,
COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;Identificando Anomalias
Compare a receita de hoje com a linha de base móvel:
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;NULLs Iniciais
Com uma janela de 7 linhas, as 6 primeiras linhas têm médias NULL/parciais. Decida se deve ocultá-las ou considerar válidas as janelas parciais.
Desempenho
Agregações cumulativas precisam de entradas ordenadas pela partição. Um índice na coluna de ORDER BY evita a ordenação.
Recapitulação
Quadros permitem cálculos cumulativos.
- Quadro padrão com ORDER BY = "do início até a linha atual"
ROWS BETWEEN n PRECEDING AND CURRENT ROW= janela móvel- SUM/AVG/MAX em janelas = cumulativos ou móveis
Verificação rápida
Qual cláusula de quadro fornece uma média móvel de 7 dias até a linha atual?
Perguntas Frequentes
A aula “Totais acumulados e médias móveis” é grátis?
Sim — o texto completo de “Totais acumulados e médias móveis” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Totais acumulados e médias móveis”?
Calcule somas acumuladas e médias móveis com SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...). Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Totais acumulados e médias móveis”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD e padrões de séries temporais
- Totais acumulados e médias móveis