we voeren berekeningen uit op gegevens met behulp van verschillende geaggregeerde functies zoals Max, Min en AVG. We krijgen een enkele uitvoerrij met behulp van deze functies. SQL Sever biedt SQL RANK functies om rang te specificeren voor individuele velden volgens de categorisaties. Het retourneert een geaggregeerde waarde voor elke deelnemende rij. SQL RANK functies kent ook als Window functies.
- Opmerking: Windows term in deze heeft geen betrekking op het Microsoft Windows-besturingssysteem., Dit zijn sql RANK functies.
we hebben de volgende rangfuncties.
- ROW_NUMBER ()
- RANK ()
- DENSE_RANK ()
- NTILE ()
In de SQL RANK-functies gebruiken we de over () – clausule om een reeks rijen in de resultatenreeks te definiëren. We kunnen ook SQL PARTITION BY clause gebruiken om een subset van gegevens in een partitie te definiëren. U kunt ook Order by clause gebruiken om de resultaten te sorteren in een aflopende of oplopende volgorde.
voordat we deze SQL RANK functies verkennen, laten we sample data voorbereiden., In deze steekproefgegevens hebben we examenresultaten voor drie studenten in wiskunde, wetenschap en Engels vakken.
we hebben de volgende voorbeeldgegevens in de ExamResult tabel.
laten we elke SQL Rank functie gebruiken in aankomende voorbeelden.
ROW_Number () SQL RANK function
we gebruiken row_number() SQL RANK function om een uniek volgnummer te krijgen voor elke rij in de opgegeven gegevens. Het geeft de rang één voor de eerste rij en dan verhoogt de waarde met één voor elke rij. We krijgen verschillende rangen voor de rij met vergelijkbare waarden ook.,
Voer de volgende query uit om een rang voor studenten te krijgen volgens hun cijfers.,
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., In de bovenstaande schermafbeelding krijgen we rij nummer 1 voor markeringen 50.
We kunnen aflopende volgorde specificeren met Volgorde per clausule, en het verandert de rang dienovereenkomstig.,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., We hebben studieresultaten voor drie vakken. We willen het resultaat van de studenten rangschikken volgens hun cijfers in de vakken. Bijvoorbeeld, in de volgende screenshot, student Isabella kreeg de hoogste cijfers in het Engels onderwerp en de laagste cijfers in wiskunde onderwerp. Volgens de cijfers, Isabella krijgt de eerste rang in het Engels en 3e plaats in wiskunde onderwerp.
Voer de volgende query uit om dit resultaat te krijgen.,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 deze query hebben we geen SQL-partitie per clausule gespecificeerd om de gegevens in een kleinere subset te verdelen. We gebruiken de SQL Rank-functie met over-clausule op Marks-clausule (in aflopende volgorde) om rangen voor de respectieve rijen te krijgen.,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., Bijvoorbeeld, de hoogste en laagste cijfers in de complete resultaatset zijn respectievelijk 90 en 50. In de resultatenreeks krijgt het hoogste cijfer rang 1, en het laagste cijfer krijgt rang 9.
als twee studenten dezelfde cijfers krijgen (in ons voorbeeld, rijnummers 4 en 5), zijn hun rangen ook hetzelfde.
DENSE_RANK() SQL RANK function
we gebruiken dense_rank() functie om een uniek rangnummer binnen de partitie op te geven volgens de opgegeven kolomwaarde. Het is vergelijkbaar met de Rangfunctie met een klein verschil.,
In de SQL RANK functie DENSE_RANK (), als we dubbele waarden hebben, kent SQL ook verschillende rangen toe aan die rijen. Idealiter zouden we dezelfde rang moeten krijgen voor dubbele of vergelijkbare waarden.
laten we de volgende query uitvoeren met de functie DENSE_RANK ().,
1
2
3
4
5
6
|
SELECTEER Studentname,
Onderwerp
Markeringen
DENSE_RANK() OVER(ORDER BY-Merken DESC) Rang
VAN ExamResult
VOLGORDE van Rang;
|
In de uitgang, en u kunt zien hebben we dezelfde waarde voor zowel Lily en Isabella, die scoorde 70 punten.,
laten we dense_rank functie gebruiken in combinatie met de SQL partitie per clausule.,v id=”2d0aafc924″>
We hebben geen twee studenten met gelijkaardige tekens; daarom resultaatset vergelijkbaar met de Functie RANG gebruiken in dit geval.,
laten we het studentteken bijwerken met de volgende query en de query opnieuw uitvoeren.
1
|
Update Examresult set Tekens=70 waar Studentname=’Isabella’ en Subject=’Wiskunde’
|
We kunnen zien dat in de groep studenten, Isabella kreeg soortgelijke merken in de Wiskunde en de exacte vakken., Rang is in dit geval ook hetzelfde voor beide vakken.
laten we het verschil zien tussen RANK() en DENSE_RANK() SQL rank functie met de volgende query.,b829″>
1
2
3
4
5
6
7
|
SELECTEER Studentname,
Onderwerp
Markeringen
DENSE_RANK() OVER(PARTITION BY StudentName OM DOOR Tekens ) Rang
VAN ExamResult
OM DOOR Studentname,
Rang;
|
In de output, zie je het gat in de functie classificatie op output binnen de partities., We hebben geen gat in de dense_rank functie.
in de volgende schermafbeelding kunt u zien dat Isabella vergelijkbare getallen heeft in de twee onderwerpen. Een rank functie kent rang 1 toe voor vergelijkbare waarden, maar intern negeert rang twee, en de volgende rij krijgt rang drie.
in de Dense_Rank functie behoudt het de rang en geeft het geen gap voor de waarden.
NTILE(N) SQL rank function
we gebruiken de functie NTILE(N) om het aantal rijen in het opgegeven (N) aantal groepen te verdelen., Elke rijgroep krijgt zijn rang volgens de opgegeven voorwaarde. We moeten de waarde voor het gewenste aantal groepen specificeren.
in mijn voorbeeld hebben we negen records in de ExamResult tabel. Het NTILE (2) laat zien dat we een groep van twee records nodig hebben in het resultaat.,
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.,
evenzo deelt NTILE(3) het aantal rijen van drie groepen met drie records in elke groep.,
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., In de volgende query wordt elke partitie op onderwerpen verdeeld in twee groepen.,
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., Stel dat we de gegevens van de studenten uit de rangen 1 tot 3 willen krijgen. In de volgende query gebruiken we common table expressions(CTE) om gegevens te krijgen met behulp van de functie ROW_NUMBER() en later gefilterd het resultaat van CTE om aan onze voorwaarde te voldoen.,d>
We kunnen gebruik maken van de OFFSET HALEN commando vanaf de SQL Server-2012 op te halen van een bepaald aantal records.,v id=”0fa57edc44″>
Een korte samenvatting van SQL RANG Functies
ROW_Number |
Het wijst de volgorde nummer voor elke record uniek., |
RANK |
Het kent het rangnummer toe aan elke rij in een partitie. Het slaat het nummer voor vergelijkbare waarden over. |
Dense_RANK |
Het kent het rangnummer toe aan elke rij in een partitie. Het slaat het nummer voor vergelijkbare waarden niet over. |
NTILE (N) |
het verdeelt het aantal rijen per opgegeven partitie en kent unieke waarde toe aan de partitie., |
conclusie
In dit artikel hebben we SQL RANK functies en het verschil tussen deze functies onderzocht. Het is handig voor SQL-ontwikkelaars om vertrouwd te zijn met deze functies om hun gegevens goed te verkennen en te beheren. Als u opmerkingen of vragen, voel je vrij om ze te verlaten in de reacties hieronder.,
- Auteur
- Laatste Berichten
hij is de maker van een van de grootste gratis online collecties van artikelen over een enkel onderwerp, met zijn 50-delige serie op SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server community, werd hij in 2020 en 2021 bij SQLShack onderscheiden met verschillende prijzen, waaronder de prestigieuze “beste auteur van het jaar”.,Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt over een onderwerp dat in zijn geschriften wordt behandeld, kan hij worden bereikt in rajendra.gupta16@gmail.,com
Bekijk alle berichten van Rajendra Gupta
- Uitvoeren van kleine en grote versie-upgrades voor AWS RDS-SQL Server – januari 29, 2021
- het Implementeren van AWS RDS-PostgreSQL gevallen, 27 januari 2021
- het Migreren van uw lokale SQL-databases naar AWS RDS SQL Server met behulp van AWS DMS – januari 25, 2021