0Pricing
SQL Academy · Lezione

OVER, PARTITION BY, ORDER BY

Comprenda il modello delle funzioni finestra: OVER, PARTITION BY per raggruppare, ORDER BY per ordinare, e le differenze rispetto a GROUP BY

OVER, PARTITION BY, ORDER BY è 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.

Che cos'è una funzione finestra?

Una funzione finestra calcola un valore su un insieme di righe correlate alla riga corrente, senza comprimere il risultato come fa GROUP BY. Mantiene ogni riga E aggiunge una colonna aggregata.

Esempio di base

La media del totale degli ordini sull'intera tabella, riportata su ogni riga:

SELECT id, total,
       AVG(total) OVER () AS avg_total
FROM orders;

Clausola OVER

La clausola OVER (...) definisce la finestra. Le parentesi vuote indicano «l'intero insieme di risultati».

SELECT id, total,
       SUM(total) OVER () AS grand_total
FROM orders;

PARTITION BY: raggruppare la finestra

Come GROUP BY, ma le righe non vengono compresse:

SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;

-- Every order keeps its row; user_total is the same for all of one user's orders.

ORDER BY nella finestra

ORDER BY all'interno di OVER definisce l'ordinamento delle righe per i calcoli progressivi:

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

-- Running total per user, ordered by date.

Finestra e GROUP BY a confronto

Confronto diretto:

-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;

-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
       SUM(total) OVER (PARTITION BY user_id)
FROM orders;

Un frame diverso per ogni riga

Il «frame» è l'insieme di righe all'interno della partizione che la funzione considera. Il frame predefinito con ORDER BY va «dall'inizio alla riga corrente»: è ciò che produce i totali progressivi.

Finestre con nome

Se più funzioni condividono una finestra, le assegni un nome una sola volta:

SELECT id, user_id, total,
       SUM(total) OVER w AS running_sum,
       AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);

La maggior parte delle aggregazioni funziona come funzione finestra

COUNT, SUM, AVG, MIN, MAX: tutte possono essere utilizzate su una finestra. Le funzioni finestra specializzate aggiungono ROW_NUMBER, RANK, LAG/LEAD, NTILE e così via.

Le funzioni finestra vengono eseguite dopo WHERE

Ordine logico: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. Pertanto WHERE filtra le righe prima del calcolo delle finestre.

Considerazioni sulle prestazioni

Le funzioni finestra richiedono un ordinamento (o un hash). Per partizioni grandi, un indice sulle colonne (partizione, ordinamento) evita il passaggio di ordinamento.

Riepilogo

Le funzioni finestra aggiungono valori aggregati a ogni riga.

  • OVER () = intero risultato
  • PARTITION BY = raggruppa la finestra
  • ORDER BY nella finestra = abilita i calcoli progressivi

Verifica rapida

Che cosa calcola SUM(x) OVER (PARTITION BY user_id)?

Domande Frequenti

La lezione «OVER, PARTITION BY, ORDER BY» è gratuita?

Sì — il testo completo di «OVER, PARTITION BY, ORDER BY» è 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 «OVER, PARTITION BY, ORDER BY»?

Comprenda il modello delle funzioni finestra: OVER, PARTITION BY per raggruppare, ORDER BY per ordinare, e le differenze rispetto a GROUP BY 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 «OVER, PARTITION BY, ORDER BY»?

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