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
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD e pattern delle serie temporali
- Totali progressivi e medie mobili