Vi udføre beregninger på data ved hjælp af forskellige aggregerede funktioner, såsom Max, Min og AVG. Vi får en enkelt output række ved hjælp af disse funktioner. S .l Sever giver s .l RANK funktioner til at angive rang for de enkelte felter som pr kategoriseringer. Det returnerer en samlet værdi for hver deltagende række. S .l rang funktioner også kender som vinduet funktioner.
- Bemærk: termindo .s-term i dette vedrører ikke Microsoft operatingindo .s-operativsystemet., Disse er s .l RANK funktioner.
Vi har følgende rangfunktioner.
- ROW_NUMBER()
- RANG()
- DENSE_RANK()
- NTILE()
I SQL RANG funktioner, bruger vi OVER() klausul til at definere et sæt af rækker i resultatet. Vi kan også bruge S .l-PARTITION efter klausul til at definere en delmængde af data i en partition. Du kan også bruge Order by-klausul til at sortere resultaterne i en faldende eller stigende rækkefølge.
før vi udforsker disse s .l-RANGFUNKTIONER, lad os forberede prøvedata., I denne prøve data, vi har eksamensresultater for tre studerende i matematik, videnskab og engelsk fag.
Vi har følgende prøvedata i E .amresult-tabellen.
lad os bruge hver s .l Rank funktioner i kommende eksempler.
ROW_Number() SQL RANG funktion
Vi bruger ROW_Number() SQL RANG funktion til at få et unikt fortløbende nummer for hver række i den angivne data. Det giver rang en for den første række og øger derefter værdien med en for hver række. Vi får forskellige rækker for rækken, der også har lignende værdier.,Udfør følgende forespørgsel for at få en rang for studerende i henhold til deres karakterer.,
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., I ovenstående skærmbillede får vi række nummer 1 for mærker 50.
Vi kan angive faldende rækkefølge med rækkefølge efter klausul, og det ændrer rang i overensstemmelse hermed.,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., Vi har studerendes resultater for tre fag. Vi ønsker at rangere resultatet af studerende i henhold til deres karakterer i fagene. For eksempel, i det følgende skærmbillede, studerende Isabella fik de højeste karakterer i engelsk emne og laveste karakterer i matematik emne. Som pr mærkerne, Isabella får den første rang på engelsk og 3.plads i matematik emne.
Udfør følgende forespørgsel for at få dette resultat indstillet.,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., I denne forespørgsel specificerede vi ikke s .l-PARTITION efter klausul for at opdele dataene i en mindre delmængde. Vi bruger s .l rang funktion med over klausul om mærker klausul ( i faldende rækkefølge) for at få rækker for respektive rækker.,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., For eksempel er de højeste og laveste mærker i det komplette resultatsæt henholdsvis 90 og 50. I resultatsættet får det højeste mærke rang 1, og det laveste mærke får rang 9.
Hvis to studerende får de samme karakterer (i vores eksempel, rækkenumre 4 og 5), er deres rækker også de samme.
DENSE_RANK() SQL RANG funktion
Vi bruger DENSE_RANK() funktion til at angive en unik rang nummer inden den partition, som pr den angivne kolonne værdi. Det ligner Rangfunktionen med en lille forskel.,
I S .l RANK-funktionen DENSE_RANK(), hvis vi har dobbeltværdier, tildeler s .l også forskellige rækker til disse rækker. Ideelt set bør vi få den samme rang for duplikat eller lignende værdier.
lad os udføre følgende forespørgsel med funktionen DENSE_RANK ().,
1
2
3
4
5
6
|
VÆLG Studentname,
Emne
Mærker
DENSE_RANK() OVER(FOR Mærker DESC) Rang
FRA ExamResult
FOR AF Rang;
|
I output, du kan se vi har samme værdi for både Lily og Isabella, der scorede 70 mærker.,
lad os bruge DENSE_RANK-funktionen i kombination med S .l-partitionen efter klausul.,v id=”2d0aafc924″>
Vi har ikke to studerende med lignende mærker; derfor resultat, der svarer til RANG Funktion i dette tilfælde.,
lad os Opdatere studentmærket med følgende forespørgsel og køre forespørgslen igen.
1
|
Opdatering Examresult sæt Mærker=70, hvor Studentname=’Isabella’ og Emne=’Matematik’
|
Vi kan se, at de studerende i gruppen, Isabella fik lignende mærker i Matematik og Naturvidenskabelige fag., Rang er også den samme for begge fag i dette tilfælde.
Lad os se forskellen mellem RANG() og DENSE_RANK() SQL Rang funktion med følgende forespørgsel.,b829″>
1
2
3
4
5
6
7
|
VÆLG Studentname,
Emne
Mærker
DENSE_RANK() OVER(PARTITION AF StudentName FOR Mærker ) Rang
FRA ExamResult
FOR AF Studentname,
Rang;
|
I output, du kan se forskellen i rang, funktion output i de partitioner., Vi har ikke noget hul i DENSE_RANK-funktionen.
I det følgende skærmbillede, kan du se, at Isabella har et tilsvarende tal i de to fag. En rangfunktion tildeler rang 1 For lignende værdier dog ignorerer internt rang to, og den næste række får rang tre.
i Dense_Rank-funktionen opretholder den rangen og giver ikke noget hul for værdierne.
NTILE(n) s .l RANK function
Vi bruger ntile(n) funktionen til at distribuere antallet af rækker i det angivne (n) antal grupper., Hver rækkegruppe får sin rang som pr den angivne betingelse. Vi skal angive værdien for det ønskede antal grupper.
i mit eksempel har vi ni poster i E .amresult-tabellen. NTILEN (2) viser, at vi kræver en gruppe på to poster i resultatet.,
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.,
tilsvarende deler NTILE(3) Antallet af rækker af tre grupper med tre poster i hver gruppe.,
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., I den følgende forespørgsel er hver partition om emner opdelt i to grupper.,
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., Antag, at vi ønsker at få data fra de studerende fra rang 1 til 3. I den følgende forespørgsel bruger vi almindelige tabeludtryk (CTE) til at få data ved hjælp af ro ._number () – funktionen og filtrerede senere resultatet fra CTE for at tilfredsstille vores tilstand.,d>
Vi kan bruge OFFSET HENTE kommando, der starter fra SQL Server 2012 for at hente et bestemt antal registreringer.,v id=”0fa57edc44″>
En hurtig oversigt over SQL-RANG Funktioner
ROW_Number |
Det tildeler fortløbende rang nummer til hver unik rekord., |
rang |
det tildeler rangnummeret til hver række i en partition. Det springer nummeret for lignende værdier. |
Dense_RANK |
det tildeler rangnummeret til hver række i en partition. Det springer ikke over nummeret for lignende værdier. |
NTIL(n) |
den opdeler antallet af rækker som pr specificeret partition og tildeler unik værdi i partitionen., |
Konklusion
I denne artikel, vi undersøgt SQL RANG funktioner og forskellen mellem disse funktioner. Det er nyttigt for S .l-udviklere at være bekendt med disse funktioner til at udforske og administrere deres data Godt. Hvis du har kommentarer eller spørgsmål, er du velkommen til at forlade dem i kommentarerne nedenfor.,
- Forfatter
- Seneste Indlæg
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne, med hans 50-del serie om SQL Server Altid På Tilgængelighed Grupper. Baseret på hans bidrag til S .l Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “årets bedste forfatter” kontinuerligt i 2020 og 2021 på s .lshack.,
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning om ethvert emne, der er dækket i hans skrifter, kan han kontaktes på rajendra.gupta16@Gmail.,com
Vis alle indlæg af Rajendra Gupta
- Udfører mindre og større version opgraderinger til AWS RDS SQL Server – januar 29, 2021
- Implementering AWS RDS-PostgreSQL tilfælde – januar 27, 2021
- overfør dine on-premises SQL-databaser til at AWS RDS SQL Server ved hjælp af AWS DMS – 25 januar 2021