Vi utføre beregninger på dataene ved hjelp av ulike aggregerte funksjoner som Maks, Min, og AVG. Vi får et enkelt utgang rad ved å bruke disse funksjonene. SQL Sever gir SQL RANG funksjoner for å angi verdi for det enkelte felt som per categorizations. Den returnerer en aggregert verdi for hver deltakende rad. SQL RANG funksjoner også kjenner som Vinduet Funksjoner.
- Merk: Windows-begrepet i dette ikke er knyttet til operativsystemet Microsoft Windows., Disse er SQL RANG funksjoner.
Vi har følgende rangering funksjoner.
- ROW_NUMBER()
- RANK()
- DENSE_RANK()
- NTILE()
I SQL RANG funksjoner, bruker vi OVER() punkt for å definere et sett med rader i resultatsettet. Vi kan også bruke SQL PARTITION AV punkt for å definere et delsett av dataene i en partisjon. Du kan også bruke Order by-setningsdel for å sortere resultatene i en synkende eller stigende rekkefølge.
Før vi utforske disse SQL RANG funksjoner, la oss forberede eksempel data., I dette eksempel data, har vi resultater for tre studenter i Matematikk, Naturfag og engelsk fag.
Vi har følgende eksempel data i ExamResult bordet.
La oss bruke hver SQL-Rank Funksjoner i kommende eksempler.
ROW_Number() SQL RANG funksjon
Vi bruke ROW_Number() SQL-RANG-funksjonen for å få et unikt løpenummer for hver rad i den angitte data. Det gir en rangering for den første raden, og deretter justeres verdien med én for hver rad. Vi får ulike rekker for rad har lignende verdier som godt.,
– Utfør følgende spørring for å få en rangering for studenter som per deres merker.,
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 skjermbildet over, vi får RAD nummer 1 for markerer 50.
Vi kan angi synkende rekkefølge med Bestilling Av klausulen, og det endrer VERDI tilsvarende.,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 student resultater for tre fag. Vi ønsker å rangere resultatet av studenter som per sine merker i fagene. For eksempel, i følgende skjermbilde, student Isabella fikk høyeste karakter i engelsk emne og laveste karakter i Matematikk-faget. Som per-merker, Isabella får den første rang i engelsk og 3. plass i Matematikk-faget.
– Utfør følgende spørring for å få dette resultatet sett.,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 dette søket, vi gjorde ikke angi SQL PARTITION Av punkt å dele data i en mindre undergruppe. Vi bruker SQL Rang funksjon med over punkt på Merker punkt ( i synkende rekkefølge) for å få rekkene for respektive rader.,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, den høyeste og laveste merker i komplett resultat er 90 og 50 kroner. I resultatsettet, høyeste karakter får VERDI 1, og den laveste mark får RANG 9.
Hvis to studenter får de samme merkene (i vårt eksempel, RAD nummer 4 og 5), sine rekker, er også de samme.
DENSE_RANK() SQL RANG funksjon
Vi bruke DENSE_RANK () – funksjonen til å angi en unik rang nummer i partisjonen som per den angitte kolonnen verdi. Det er lik Rang funksjon med en liten forskjell.,
I SQL RANG funksjon DENSE_RANK(), hvis vi har like verdier, SQL tildeler ulike rekkene til de radene som godt. Ideelt sett skulle vi få samme verdi for duplikat eller lignende verdier.
La oss utføre følgende spørring med DENSE_RANK () – funksjonen.,
1
2
3
4
5
6
|
VELG Studentname,
Emne
– Merker
DENSE_RANK() OVER(BESTILLING AV Merker DESC) Rang
FRA ExamResult
BESTILLING AV Rang;
|
I utgang, kan du se at vi har samme verdi for både Lily og Isabella som scoret 70 merker.,
La oss bruke DENSE_RANK funksjon i kombinasjon med SQL PARTITION AV klausulen.,v id=»2d0aafc924″>
Vi har ikke to studenter med lignende merker; derfor resultere satt lik RANG Funksjon i dette tilfellet.,
La oss oppdatere student merket med følgende spørring og kjører spørringen.
1
|
Oppdatering Examresult satt Merker=70 hvor Studentname=’Isabella’ og Emne=’Matematikk’
|
Vi kan se det i student-gruppen, Isabella fikk lignende karakter i Matematikk og Realfag., Rank er også den samme for begge emner i dette tilfellet.
La oss se forskjellen mellom RANK() og DENSE_RANK() SQL Rang funksjon med følgende spørring.,b829″>
1
2
3
4
5
6
7
|
VELG Studentname,
Emne
– Merker
DENSE_RANK() OVER(PARTISJON AV StudentName BESTILLING AV Merker ) Rang
FRA ExamResult
BESTILLING AV Studentname,
Rang;
|
I utgang, kan du se gapet i rang funksjon utgang i partisjoner., Vi har ikke noen hull i DENSE_RANK funksjon.
I det følgende skjermbilde, kan du se at Isabella har lignende tall i de to fagene. En rangering funksjonen tilordner rangering 1 for tilsvarende verdier imidlertid internt ignorerer rang to, og neste rad blir rang tre.
I Dense_Rank funksjon, og det opprettholder den rang og ikke gir noen gap for verdier.
NTILE(N) SQL RANG funksjon
Vi bruke NTILE(N) – funksjonen til å distribuere antall rader i den angitte (N) antall grupper., Hver rad gruppe får sin rang som per den angitte tilstand. Vi trenger å angi verdien for ønsket antall grupper.
I mitt eksempel, vi har ni poster i ExamResult bordet. Den NTILE(2) viser at vi trenger en gruppe av to postene 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.,
på samme måte, NTILE(3) dividerer antall rader av tre grupper har 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 det følgende spørring, hver partisjon på fag er delt inn 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., Anta at vi ønsker å få data om studenter fra rekkene 1 til 3. I det følgende søket, vi bruker felles bord uttrykk(CTE) for å få data ved hjelp av ROW_NUMBER () – funksjonen, og senere filtrerte resultatet fra CTE for å tilfredsstille våre tilstand.,d>
Vi kan bruke OFFSET HENTE kommandoen starter fra SQL Server-2012 for å hente et bestemt antall poster.,v id=»0fa57edc44″>
En rask oppsummering av SQL RANG Funksjoner
ROW_Number |
Det gir fortløpende rang nummer til hver unik rekord., |
VERDI |
Det tildeler graden nummer for hver rad i en partisjon. Den hopper antall for de samme verdier. |
Dense_RANK |
Det tildeler graden nummer for hver rad i en partisjon. Det gjør ikke hoppe over antall for de samme verdier. |
NTILE(N) |
Det dividerer antall rader per den angitte partisjon og tildeler unik verdi i partisjonen., |
Konklusjon
I denne artikkelen, vi utforsket SQL RANG funksjoner og forskjellen mellom disse funksjonene. Det er nyttig for sql utviklere å bli kjent med disse funksjonene til å utforske og administrere sine data godt. Hvis du har noen kommentarer eller spørsmål, gjerne la dem i kommentarfeltet nedenfor.,
- Forfatter
- Siste Innlegg
Han er skaperen av en av de største gratis online samlinger av artikler på et enkelt tema, med hans 50-del serien på SQL Server Alltid På Grupper av Tilgjengelighet. Basert på hans bidrag til SQL Server-samfunnet, han har blitt anerkjent med ulike priser inkludert den prestisjefylte «Beste forfatter av the year» kontinuerlig i 2020 og 2021 på SQLShack.,
Raj er alltid interessert i nye utfordringer, slik at hvis du har behov for rådgivning hjelpe på alle fag som er dekket i hans skrifter, han kan nås på rajendra.gupta16@gmail.,com
Vis alle innlegg av Rajendra Gupta
- Utføre små og store versjon oppgraderinger for AWS RDS SQL Server – 29. januar 2021
- Distribusjon AWS RDS-PostgreSQL-forekomster – 27. januar 2021
- Migrere din lokale SQL databaser til AWS RDS SQL Server ved hjelp av AWS DMS – 25 januar 2021