Criterio ROWS e RANGE
Lezione 12 di 13 del corso SQL avanzato di Coddy.
Al momento, non possiamo essere flessibili nello scegliere quante righe precedenti o successive prendere in considerazione. Ora è possibile con i criteri ROWS & RANGE. Per usarli scriviamo:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
E possiamo specificare le seguenti opzioni:
CURRENT ROW- la riga correnten PRECEDING- righe precedenti alla riga correnten FOLLOWING- righe successive alla riga corrente
La differenza tra ROWS & RANGE è che il criterio ROWS non tiene conto dei valori, ma solo delle posizioni, mentre RANGE definisce la finestra in termini di intervalli di valori invece che di posizioni delle righe.
Per RANGE dobbiamo specificare ORDER BY --column_name--, perché altrimenti non saprebbe come scegliere la finestra.
Per esempio:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGQui crea una finestra che include la riga corrente, la riga precedente e quella successiva.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsQui crea una finestra che include, per ogni livello (ordinato in ordine crescente), il livello corrente, un livello precedente e uno successivo. Se il livello corrente è 5, includerà i livelli 4, 5 e 6.
Nota: L'uso di RANGE BETWEEN potrebbe comportare l'inclusione di più righe nella finestra, perché include tutte le righe che condividono gli stessi valori di quelle nell'intervallo, mentre ROWS BETWEEN includerà sempre lo stesso numero di righe (se disponibili nel set di dati).
Inoltre, RANGE non supporta le colonne di date.
Sfida
FacilePer questa sfida, abbiamo dei giornali da produrre. Vorremmo conoscere il numero medio di giornali stampati nei due giorni precedenti la riga corrente e nel giorno successivo. Inoltre, vorremmo conoscere la differenza tra il numero massimo e minimo di giornali stampati dalla data corrente e nei tre giorni precedenti. Chiama queste colonne rispettivamente avg_newspapers e diff_newspapers.
Provalo tu
Tutte le lezioni di SQL avanzato
4Riepilogo
Sfida finale #13Funzioni finestra, parte 2
Funzioni RANK e DENSE_RANKFunzione NTILEFunzioni di aggregazioneCriterio ROWS e RANGEEsercitati da solo: Compilatore Python online