La funzione del numero di riga è una delle funzioni della finestra utilizzata per assegnare il numero di riga alle righe in ciascuna delle partizioni nell'ordine in cui sono state ordinate nella partizione utilizzando il comando PARTIZIONE clausola, PARTITION solo il ORDINE La clausola può essere utilizzata all'interno della clausola OVER in tal caso l'intera tabella verrà considerata come una partizione. Ma la clausola ORDER BY è obbligatoria per utilizzare il file NUMERO_RIGA() funzione poiché dispone le righe nelle partizioni in quell'ordine logico e successivamente la funzione ROW_NUMBER() può assegnare il numero di riga. In ciascuna partizione, il numero di riga inizia da 1.
Sintassi:
NUMERO_RIGA ( )
OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC o DESC) AS nome_colonna
Componenti della funzione ROW_NUMBER()
- PARTIZIONE PER: Questa è la sottoclausola principale che suddivide le righe in finestre e per ogni riga i valori di funzioni della finestra applicata verrà calcolata.
- ORDINATO DA: Viene utilizzato per ordinare le righe nella partizione, per impostazione predefinita è l'ordine crescente. Senza la clausola ORDER BY, la funzione ROW_NUMBER() non funziona.
- Tipo di reso: Il tipo restituito della funzione ROW_NUMBER() è BIGINT.
Utilizzo della funzione ROW_NUMBER()
Passo 1: Crea il database Geeksforgeeks utilizzando la seguente query SQL:
Domanda
CREATE DATABASE Geeksforgeeks>
Utilizza il database GFG.
Domanda
USE techcodeview.com>
Passaggio 3: Crea una tabella con gli studenti delle diverse sezioni con i loro voti totali su 500.
Domanda
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
Passaggio 4: Inserisci le righe nella tabella:
Domanda
INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368), (5, 'Geek15','C',295), (6, 'Geek16','C',495);>
Passaggio 5: Controlla la tabella
SELECT * FROM studentsSectionWise>
Produzione:

tabella studentsSectionWise
come leggere il file CSV in Java
Utilizzo della clausola ORDER_BY con la funzione ROW_NUMBER()
Utilizzando semplicemente la clausola ORDER BY con ascendente o discendente si considera l'intera tabella come una sola partizione.
Controlliamo il rankingNumber degli studenti utilizzando la funzione ROW_NUMBER() con la clausola ORDER BY che include tutte le sezioni:
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Spiegazione: Nella query abbiamo utilizzato la clausola ORDER BY con studentsMarks che è ordinato in ordine DESC.
Produzione:

Produzione
Spiegazione: Nel risultato possiamo vedere che l'intera tabella è considerata come una singola partizione e il numero rankingNumber è in ordine crescente con studentsMarks in ordine decrescente.
Utilizzo di PARTITION_BY con la funzione ROW_NUMBER()
Utilizzando semplicemente la clausola PARTITION BY divide e la tabella in diverse partizioni in base al nome della colonna e quindi la clausola ORDER BY con ascendente o discendente considera l'intera tabella come una sola partizione. E poi ROW_NUMBER() funziona con ciascun numero univoco a partire da 1 in ciascuna partizione.
Controlliamo la sezione della classifica utilizzando la funzione ROW_NUMBER() con le clausole PARTITION BY e ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Spiegazione: Nella query che abbiamo utilizzato Clausola PARTITION BY per partizionare la tabella sulla clausolasectionName e ORDER BY con studentsMarks che è ordinato in DESC.
Produzione:

Produzione
Spiegazione: Nel risultato possiamo vedere che abbiamo partizioni divise per sezioneNome saggio e quindi in ciascuna partizione gli studenti vengono ordinati sulla base dei voti degli studenti nell'ordine DESC, la funzione ROW_NUMBER() assegna il numero di riga a partire da in ciascuna partizione incrementandolo .
Comprendere ROW_NUMBER() senza PARTITION BY
La funzione ROW_NUMBER() di SQL Server è uno strumento flessibile che consente di fornire a ciascuna riga in un set di risultati un numero di riga univoco. È altrettanto efficace se utilizzato senza la clausola PARTITION BY, anche se viene spesso utilizzato insieme ad essa per raggruppare e classificare all'interno delle partizioni. Le possibilità e gli usi di ROW_NUMBER() senza la clausola PARTITION BY verranno discussi in questo articolo.
Sintassi:
SELEZIONARE
ROW_NUMBER() FINITO ( ORDINATO DA Il tuo ordine per colonna) COME Numero riga,
Altrecolonne
DA
NomeTabella;
Controlliamo la sezione della classifica utilizzando la funzione ROW_NUMBER() senza le clausole PARTITION BY e ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Produzione:

Produzione
Utilizzo di ROW_NUMBER() per ottenere il sottoinsieme di righe
La funzione ROW_NUMBER() può essere utilizzata per ottenere il sottoinsieme di righe dalla tabella utilizzando il CTE che può essere utile in caso di impaginazione dei dati.
Controlliamo i primi 2 classificati di ogni classe utilizzando il file CTE (espressione di tabella comune) con la funzione ROW_NUMBER() :
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
Spiegazione: Qui nella query abbiamo utilizzato l'espressione CTE per ottenere la tabella temporanea dalla query utilizzata sopra e abbiamo utilizzato la query SELCT esterna per ottenere gli studenti il cui rankingNumber è inferiore o uguale a 2.
Produzione:

Produzione
Spiegazione: Nel risultato possiamo vedere che abbiamo i primi 2 ranking di ciascuna sezione che sono il sottoinsieme della tabella ottenuta dalla query mostrata nell'esempio precedente.
Vantaggi diROW_NUMBER()>Con PARTIZIONE PER
- Consente la classificazione avanzata delle partizioni.
- Abilita la numerazione univoca delle righe all'interno di gruppi specifici.
- Consente una maggiore flessibilità in circostanze che richiedono analisi approfondite.
Vantaggi diROW_NUMBER()>Senza PARTIZIONE PER
- Diretto e semplice.
- semplifica la classificazione degli elementi in base a una particolare colonna.
- Può offrire prestazioni migliori, soprattutto per set di risultati più piccoli.
Conclusione
È molto utile quando vogliamo avere la sequenza in base alla partizione ed eseguire le operazioni necessarie. Utilizzando Clausola ORDER BY è obbligatorio durante l'utilizzo della funzione ROW_NUMBER(). Anche utilizzando la CTE possiamo ricavare i sottoinsiemi della tabella dalle partizioni ordinate. Il caso d'uso principale di ROW_NUMBER() è la classificazione delle righe sulla base di diverse partizioni, il che è molto utile ai fini dell'analisi dei dati.