SQLShack (Italiano)

Eseguiamo calcoli sui dati utilizzando varie funzioni aggregate come Max, Min e AVG. Otteniamo una singola riga di output usando queste funzioni. SQL Sever fornisce funzioni di rango SQL per specificare rango per i singoli campi secondo le categorizzazioni. Restituisce un valore aggregato per ogni riga partecipante. Funzioni di rango SQL conosce anche come funzioni della finestra.

  • Nota: il termine Windows in questo non si riferisce al sistema operativo Microsoft Windows., Queste sono funzioni di RANGO SQL.

Abbiamo le seguenti funzioni di rango.

  • ROW_NUMBER ()
  • RANK ()
  • DENSE_RANK ()
  • NTILE ()

Nelle funzioni SQL RANK, usiamo la clausola OVER() per definire un insieme di righe nel set di risultati. Possiamo anche usare SQL PARTITION BY clausola per definire un sottoinsieme di dati in una partizione. È inoltre possibile utilizzare la clausola Order by per ordinare i risultati in ordine decrescente o crescente.

Prima di esplorare queste funzioni di RANGO SQL, prepariamo i dati di esempio., In questi dati di esempio, abbiamo i risultati degli esami per tre studenti in matematica, Scienze e materie inglesi.

Abbiamo i seguenti dati di esempio nella tabella ExamResult.

Usiamo ogni funzione di rango SQL nei prossimi esempi.

ROW_Number() SQL RANK function

Usiamo ROW_Number() SQL RANK function per ottenere un numero sequenziale univoco per ogni riga nei dati specificati. Dà il rango uno per la prima riga e quindi incrementa il valore di uno per ogni riga. Otteniamo gradi diversi per la riga con valori simili.,

Eseguire la seguente query per ottenere un grado per gli studenti secondo i loro voti.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., Nello screenshot qui sopra, otteniamo il numero di riga 1 per i segni 50.

Possiamo specificare l’ordine decrescente con la clausola Order By, e cambia il RANGO di conseguenza.,ae”>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., Abbiamo risultati degli studenti per tre materie. Vogliamo classificare il risultato degli studenti secondo i loro voti nelle materie. Ad esempio, nella schermata seguente, studente Isabella ha ottenuto il massimo dei voti in materia inglese e voti più bassi in materia matematica. Come per i marchi, Isabella ottiene il primo grado in inglese e 3 ° posto in materia di matematica.

Eseguire la seguente query per ottenere questo set di risultati.,v id=”c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., In questa query, non abbiamo specificato SQL PARTITION By clausola per dividere i dati in un sottoinsieme più piccolo. Usiamo la funzione di rango SQL con clausola over sulla clausola Marks (in ordine decrescente) per ottenere i ranghi per le rispettive righe.,div id=”7d9d5b54ae”>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., Ad esempio, i punteggi più alti e più bassi nel set di risultati completo sono rispettivamente 90 e 50. Nel set di risultati, il punteggio più alto ottiene RANGO 1, e il punteggio più basso ottiene RANGO 9.

Se due studenti ottengono gli stessi voti (nel nostro esempio, i numeri di RIGA 4 e 5), anche i loro ranghi sono gli stessi.

DENSE_RANK() SQL RANK function

Usiamo la funzione DENSE_RANK() per specificare un numero di rank univoco all’interno della partizione in base al valore della colonna specificato. È simile alla funzione di rango con una piccola differenza.,

Nella funzione di RANGO SQL DENSE_RANK(), se abbiamo valori duplicati, SQL assegna ranghi diversi anche a quelle righe. Idealmente, dovremmo ottenere lo stesso rango per valori duplicati o simili.

Eseguiamo la seguente query con la funzione DENSE_RANK ().,

1
2
3
4
5
6

SELEZIONARE Studentname,
Soggetto
Marchi
DENSE_RANK() OVER(ORDER BY Marchi DESC) Rank
DA ExamResult
ORDER BY Rank;

il risultato, si può vedere che abbiamo lo stesso valore per entrambi Lily e Isabella, che ha segnato 70 punti.,

Usiamo la funzione DENSE_RANK in combinazione con la clausola SQL PARTITION BY.,v id=”2d0aafc924″>

1
2
3
4
5
6
7

SELEZIONARE Studentname,
Soggetto
Marchi
DENSE_RANK() OVER(PARTIZIONE DA Soggetto in ORDINE DA Marchi DESC) Rank
DA ExamResult
ORDER BY Studentname,
Rank;

non Ci sono due studenti con marchi simili; pertanto set di risultati simili per CLASSIFICARE una Funzione, in questo caso.,

Aggiorniamo il segno dello studente con la seguente query e rieseguiamo la query.

1
Aggiornamento Examresult impostare gli indicatori=70 dove Studentname=’Isabella’ e Soggetto=’Matematica’

Possiamo vedere che il gruppo di studenti, Isabella ottenuto marchi simili in Matematica e materie scientifiche., Il grado è anche lo stesso per entrambi i soggetti in questo caso.

Vediamo la differenza tra RANK() e DENSE_RANK() funzione SQL Rank con la seguente query.,b829″>

1
2
3
4
5
6
7

SELEZIONARE Studentname,
Soggetto
Marchi
DENSE_RANK() OVER(PARTIZIONE DA StudentName ORDINE DA Marchi ) Rank
DA ExamResult
ORDER BY Studentname,
Rank;

il risultato, si può vedere il divario in classifica funzione di uscita entro le partizioni., Non abbiamo alcuna lacuna nella funzione DENSE_RANK.

Nello screenshot seguente, puoi vedere che Isabella ha numeri simili nei due soggetti. Una funzione di rango assegna rango 1 per valori simili tuttavia, ignora internamente rango due, e la riga successiva ottiene rango tre.

Nella funzione Dense_Rank, mantiene il rank e non fornisce alcun gap per i valori.

NTILE(N) SQL RANK function

Usiamo la funzione NTILE(N) per distribuire il numero di righe nel numero specificato (N) di gruppi., Ogni gruppo di righe ottiene il suo rango secondo la condizione specificata. Dobbiamo specificare il valore per il numero desiderato di gruppi.

Nel mio esempio, abbiamo nove record nella tabella ExamResult. Il NTILE (2) mostra che abbiamo bisogno di un gruppo di due record nel risultato.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

Allo stesso modo, NTILE(3) divide il numero di righe di tre gruppi con tre record in ciascun gruppo.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., Nella query seguente, ogni partizione su soggetti è divisa in due gruppi.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., Supponiamo di voler ottenere i dati degli studenti dai ranghi 1 a 3. Nella query seguente, usiamo common table expressions(CTE) per ottenere i dati utilizzando la funzione ROW_NUMBER() e successivamente filtrato il risultato da CTE per soddisfare la nostra condizione.,d>

CON StudentRanks COME
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Marchi COME Fila
DA ExamResult
)
SELEZIONARE StudentName , Marchi
DA StudentRanks
DOVE Ranghi >= 1 e si Colloca <=3
ORDER BY Ranghi

E ‘ possibile utilizzare l’OFFSET comando FETCH a partire da SQL Server 2012 per recuperare un numero specifico di record.,v id=”0fa57edc44″>

CON StudentRanks COME
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Marchi COME Fila
DA ExamResult
)
SELEZIONARE StudentName , Marchi
DA StudentRanks
ORDER BY Ranghi OFFSET 1 RIGHE FETCH NEXT 3 RIGHE;

Un rapido riepilogo di SQL Funzioni di RANK

ROW_Number

assegna il numero progressivo di numero di rango unici per ogni record.,

RANK

Assegna il numero di rank ad ogni riga di una partizione. Salta il numero per valori simili.

Dense_RANK

Assegna il numero di rango a ogni riga di una partizione. Non salta il numero per valori simili.

NTILE(N)

Divide il numero di righe secondo la partizione specificata e assegna un valore univoco nella partizione.,

Conclusione

In questo articolo, abbiamo esplorato le funzioni di RANGO SQL e la differenza tra queste funzioni. È utile per gli sviluppatori sql avere familiarità con queste funzioni per esplorare e gestire bene i propri dati. Se avete commenti o domande, sentitevi liberi di lasciarli nei commenti qui sotto.,

  • Autore
  • Post Recenti
Come un certificato MCSA e Microsoft Certified Trainer a Gurgaon, in India, con 13 anni di esperienza, Rajendra collabora con una serie di grandi imprese di messa a fuoco sull’ottimizzazione delle prestazioni, il monitoraggio, l’alta disponibilità e disaster recovery per le strategie e l’attuazione., È autore di centinaia di articoli autorevoli su SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git e tecnologie correlate che sono stati visti da oltre 10 milioni di lettori fino ad oggi.
È il creatore di una delle più grandi collezioni online gratuite di articoli su un singolo argomento, con la sua serie di 50 parti su SQL Server Always On Availability Groups. Sulla base del suo contributo alla comunità SQL Server, è stato riconosciuto con vari premi tra cui il prestigioso “Best author of the year” ininterrottamente nel 2020 e 2021 a SQLShack.,
Raj è sempre interessato a nuove sfide, quindi se avete bisogno di consulenza aiuto su qualsiasi argomento trattato nei suoi scritti, egli può essere raggiunto a rajendra.gupta16 @ gmail.,com
Visualizza tutti i messaggi di Rajendra Gupta

Ultimi messaggi di Rajendra Gupta (vedi tutti)
  • l’Esecuzione di piccoli e grandi aggiornamenti di versione per AWS RDS SQL Server – gennaio 29, 2021
  • la Distribuzione di AWS RDS PostgreSQL istanze – 27 gennaio 2021
  • Migrazione locale di database SQL AWS RDS SQL Server utilizzando AWS DMS – 25 gennaio 2021

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *