0Pricing
SQL Academy · Lezione

Totali progressivi e medie mobili

Calcoli somme progressive e medie mobili con SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...)

Totali progressivi e medie mobili è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Nozioni di base sui totali progressivi

Un totale progressivo è una SUM con ORDER BY nella finestra e senza una clausola frame, quindi il frame predefinito va «dall'inizio alla riga corrente»:

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

Totale progressivo per gruppo

Reimposti il totale progressivo per ogni utente:

SELECT id, user_id, total,
       SUM(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS user_running_total
FROM orders;

Media mobile

Una media mobile di N giorni utilizza un frame ROWS:

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) AS avg_7d
FROM daily_revenue;

Media mobile centrata

Finestra centrata di 7 giorni (3 precedenti, la corrente, 3 successive):

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
       ) AS avg_7d_centred
FROM daily_revenue;

Distribuzione cumulativa

Quale frazione dei ricavi totali abbiamo raggiunto per ogni giorno?

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day)
         / SUM(revenue) OVER ()  AS cum_share
FROM daily_revenue;

ROWS e RANGE

  • ROWS — conta fisicamente le righe (N righe prima/dopo)
  • RANGE — copre logicamente un intervallo di valori (ad esempio 7 giorni in base al valore della 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)

Massimo cumulativo

Il valore migliore raggiunto fino a ogni punto:

SELECT day, total_users,
       MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;

Conteggio cumulativo

Totale degli eventi osservati fino a questa riga:

SELECT id, ts,
       COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;

Individuare le anomalie

Confronti i ricavi di oggi con la baseline mobile:

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 iniziali

Con una finestra di 7 righe, le prime 6 righe hanno medie NULL/parziali. Decida se nasconderle o considerare valide le finestre parziali.

Prestazioni

Le aggregazioni progressive richiedono dati ordinati in base alla partizione. Un indice sulla colonna di ORDER BY evita l'ordinamento.

Riepilogo

I frame consentono i calcoli progressivi.

  • Frame predefinito con ORDER BY = «dall'inizio alla riga corrente»
  • ROWS BETWEEN n PRECEDING AND CURRENT ROW = finestra mobile
  • SUM/AVG/MAX sulle finestre = valori cumulativi o mobili

Verifica rapida

Quale clausola frame fornisce una media mobile di 7 giorni fino alla riga corrente?

Domande Frequenti

La lezione «Totali progressivi e medie mobili» è gratuita?

Sì — il testo completo di «Totali progressivi e medie mobili» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Totali progressivi e medie mobili»?

Calcoli somme progressive e medie mobili con SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...) Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Totali progressivi e medie mobili»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD e pattern delle serie temporali
  4. Totali progressivi e medie mobili
← Torna a SQL Academy