0Pricing
SQL Academy · Aula

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

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD e padrões de séries temporais
  4. Totais acumulados e médias móveis
← Voltar para SQL Academy