Riepilogo: in questo tutorial imparerai come utilizzare ROW_NUMBER()
per assegnare un numero sequenziale a ciascuna riga in un set di risultati di query.
Panoramica della funzione SQL ROW_NUMBER ()
ROW_NUMBER()
è una funzione finestra che assegna un numero intero sequenziale a ogni riga nel set di risultati della query.
Quanto segue illustra la sintassi della funzione ROW_NUMBER()
:
In questa sintassi,
- Innanzitutto, la clausola
PARTITION BY
divide il set di risultati restituito dalFROM
clausola nelle partizioni. La clausolaPARTITION BY
è facoltativa. Se lo ometti, l’intero set di risultati viene trattato come una singola partizione. - Quindi, la clausola
ORDER BY
ordina le righe in ciascuna partizione. PoichéROW_NUMBER()
è una funzione sensibile all’ordine, è richiesta la clausolaORDER BY
. - Infine, ogni riga in ciascuna alla partizione viene assegnato un numero intero sequenziale chiamato numero di riga. Il numero di riga viene reimpostato ogni volta che viene superato il limite della partizione.
Esempi SQL ROW_NUMBER ()
Useremo employees
e departments
dal database di esempio per la dimostrazione:
A) Semplice esempio SQL ROW_NUMBER ()
La seguente istruzione trova il nome, il cognome e lo stipendio di tutti i dipendenti. Inoltre, utilizza la funzione ROW_NUMBER()
per aggiungere un numero intero sequenziale a ciascuna riga.
L’immagine seguente mostra il set di risultati parziale:
B ) Utilizzo di SQL ROW_NUMBER () per l’impaginazione
La funzione ROW_NUMBER()
può essere utilizzata per l’impaginazione. Ad esempio, se desideri visualizzare tutti i dipendenti su una tabella in un’applicazione per pagine, ciascuna pagina ha dieci record.
- Innanzitutto, utilizza
ROW_NUMBER()
funzione per assegnare a ciascuna riga un numero intero sequenziale. - In secondo luogo, filtra le righe per pagina richiesta. Ad esempio, la prima pagina ha le righe che iniziano da uno a 9 e la seconda pagina ha le righe che iniziano da 11 a 20 e così via.
La seguente istruzione restituisce i record di la seconda pagina, ogni pagina ha dieci record.
Quanto segue mostra l’output:
Se desideri utilizzare l’espressione di tabella comune (CTE) invece della sottoquery, ecco la query:
C) Uso di SQL ROW_NUMBER () per trovare l’ennesimo valore più alto per gruppo
L’esempio seguente mostra come trovare i dipendenti che hanno lo stipendio più alto nei loro reparti:
Nella sottoquery:
- Innanzitutto, la clausola
PARTITION BY
distribuisce i dipendenti per reparti. - In secondo luogo, il
ORDER BY
la clausola ordina il dipendente in ogni reparto in base allo stipendio in ordine decrescente. - Terzo,
ROW_NUMBER()
assegna a ciascuna riga un numero intero sequenziale . Reimposta il numero quando il reparto cambia.
Quanto segue mostra il set di risultati della sottoquery:
Nella query esterna, abbiamo selezionato solo le righe dei dipendenti che hanno row_num
con il valore 1.
Ecco l’output dell’intera query:
Se modifichi il predicato nella WHERE
clausola da 1 a 2, 3 e così via, otterrai i dipendenti che hanno il secondo stipendio più alto, il terzo stipendio più alto e così via.
In questo tutorial, hai imparato a utilizzare la funzione SQL ROW_NUMBER()
per assegnare una sequenza numero intero per ogni riga nel set di risultati di una query.
- Questo tutorial è stato utile?
- SìNo