0Pricing
SQL Academy · Lezione

Clausole frame: ROWS e RANGE

Scelga tra le clausole frame ROWS BETWEEN e RANGE BETWEEN e comprenda come ciascuna gestisce duplicati e lacune.

Clausole frame: ROWS e RANGE è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Il frame all'interno di OVER

Una funzione finestra opera su un frame — un sottoinsieme di righe della partizione. Il frame è definito da:

OVER (
  PARTITION BY ...
  ORDER BY ...
  ROWS BETWEEN <start> AND <end>     -- or RANGE BETWEEN ...
)

Frame predefinito

Se specifica ORDER BY ma non il frame, quello predefinito è:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".

ROWS conta fisicamente

ROWS conta N righe nell'ordine della partizione, indipendentemente dal valore:

SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2.  Exactly 3 rows.

RANGE conta in base al valore

RANGE conta le righe il cui valore di ORDER BY rientra in un intervallo rispetto al valore corrente:

SUM(x) OVER (
  ORDER BY day
  RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.

Perché la distinzione è importante

Se nei dati sono presenti lacune, ROWS e RANGE producono risultati diversi:

-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 days

Frame GROUPS (PG 11+)

GROUPS conta i gruppi di righe con lo stesso valore in ORDER BY, anziché le singole righe:

SUM(x) OVER (
  ORDER BY tier
  GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.

Limiti del frame

  • UNBOUNDED PRECEDING — prima riga della partizione
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED FOLLOWING — ultima riga

Totale progressivo

Somma dall'inizio fino a qui:

SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.

Finestra retrospettiva

La media degli ultimi N giorni:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d

Finestra centrata

Consideri entrambe le direzioni:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

La sorpresa di LAST_VALUE

Con il frame predefinito, LAST_VALUE restituisce la riga corrente, non l'ultima della partizione. Usi un frame esplicito non limitato:

LAST_VALUE(name) OVER (
  PARTITION BY group ORDER BY day
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

Clausola EXCLUDE (PG 11+)

Escluda determinate righe dal frame:

SUM(x) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.

Riepilogo

Le clausole del frame consentono un controllo preciso sulle finestre.

  • ROWS — conteggio delle righe fisiche
  • RANGE — intervallo basato sui valori
  • GROUPS — gruppi di righe con lo stesso valore
  • Il frame predefinito può riservare sorprese: lo specifichi esplicitamente

Verifica rapida

Ha le entrate giornaliere, ma mancano alcuni giorni. Quale frame restituisce "tutte le righe entro i 7 giorni di calendario precedenti a oggi"?

Domande Frequenti

La lezione «Clausole frame: ROWS e RANGE» è gratuita?

Sì — il testo completo di «Clausole frame: ROWS e RANGE» è 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 «Clausole frame: ROWS e RANGE»?

Scelga tra le clausole frame ROWS BETWEEN e RANGE BETWEEN e comprenda come ciascuna gestisce duplicati e lacune. 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 1 di 4.

Quanto tempo richiede la lezione «Clausole frame: ROWS e RANGE»?

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. Clausole frame: ROWS e RANGE
  2. Lag/Lead con finestre frame
  3. Raggruppamento con NTILE e Cume_Dist
  4. Schemi di reporting nel mondo reale
← Torna a SQL Academy