Funzioni finestra: OVER
Calcola attraverso le righe senza raggrupparle. OVER indica quali righe guardare, come RANK e i totali progressivi in Excel.
Sintassi
ROW_NUMBER() OVER (ORDER BY column)RANK() OVER (ORDER BY column)SUM(column) OVER (PARTITION BY column ORDER BY column)
- PARTITION BY riavvia il calcolo per ogni gruppo.
- A differenza di GROUP BY, ogni riga resta nel risultato.
Esempio
SELECT order_id, RANK() OVER (ORDER BY order_date) AS day_rank FROM orders;
Ogni ordine con il suo rango per data. Gli ordini dello stesso giorno condividono un rango.
Tabelle usate: orders. Provalo in una lezione qui sotto.
Errori comuni
- ROW_NUMBER assegna un numero diverso a ogni riga; RANK assegna lo stesso numero ai pari merito e salta i successivi.
- Le funzioni finestra vengono eseguite dopo WHERE, quindi non si possono usare i loro risultati in WHERE. Racchiudi la query in una sottoquery o in un WITH per filtrarli.