Oversigt: I denne vejledning lærer du, hvordan du bruger ROW_NUMBER()
til at tildele et rækkefølge til hver række i et forespørgselsresultatsæt.
SQL ROW_NUMBER () Funktionsoversigt
ROW_NUMBER()
er en vinduesfunktion, der tildeler et sekventielt heltal til hver række i forespørgslens resultatsæt.
Følgende illustrerer syntaksen for ROW_NUMBER()
-funktionen:
I denne syntaks,
- Først deler
PARTITION BY
-klausulen det resultatsæt, der returneres fraFROM
klausul i partitioner.PARTITION BY
-klausulen er valgfri. Hvis du udelader det, behandles hele resultatsættet som en enkelt partition. - Derefter
ORDER BY
klausul sorterer rækkerne i hver partition. FordiROW_NUMBER()
er en rækkefølsom funktion, krævesORDER BY
-klausulen. - Endelig skal hver række i hver partition tildeles et sekventielt heltal kaldet et række nummer. Rækkens nummer nulstilles, når partitionsgrænsen krydses.
SQL ROW_NUMBER () eksempler
Vi bruger employees
og departments
tabeller fra eksempeldatabasen til demonstrationen:
A) Simple SQL ROW_NUMBER () eksempel
Følgende udsagn finder fornavn, efternavn og løn for alle medarbejdere. Derudover bruger den funktionen ROW_NUMBER()
til at tilføje sekventielt heltal til hver række.
Det følgende billede viser delresultatsættet:
B ) Brug af SQL ROW_NUMBER () til pagination
Funktionen ROW_NUMBER()
kan bruges til pagination. Hvis du f.eks. Vil vise alle medarbejdere på et bord i en applikation efter sider, som hver side har ti poster.
- Brug først
ROW_NUMBER()
-funktion for at tildele hver række et sekventielt heltal. - For det andet filtrer rækker efter anmodet side. For eksempel har den første side rækkerne, der starter fra en til 9, og den anden side har rækkerne, der starter fra 11 til 20 osv.
Følgende udsagn returnerer posterne for den anden side, hver side har ti poster.
Følgende viser output:
Hvis du vil bruge det fælles tabeludtryk (CTE) i stedet for underforespørgslen, er her forespørgslen:
C) Brug af SQL ROW_NUMBER () for at finde den højeste værdi pr. gruppe
Følgende eksempel viser dig, hvordan du finder de ansatte, der har den højeste løn i deres afdelinger:
I underforespørgslen:
- For det første fordeler
PARTITION BY
-klausulen medarbejderne efter afdelinger. - For det andet
ORDER BY
klausul sorterer medarbejderen i hver afdeling efter løn i faldende rækkefølge. - For det tredje tildeler
ROW_NUMBER()
hver række et sekventielt heltal . Det nulstiller antallet, når afdelingen skifter.
Følgende viser resultatsættet for underforespørgslen:
I den ydre forespørgsel valgte vi kun medarbejderrækken, der har row_num
med værdien 1.
Her er output fra hele forespørgslen:
Hvis du ændrer prædikatet i WHERE
-sætningen fra 1 til 2, 3 osv., får du de ansatte, der har den næsthøjeste løn, tredje højeste løn og så videre.
I denne vejledning har du lært, hvordan du bruger SQL ROW_NUMBER()
-funktionen til at tildele en sekventiel heltal til hver række i resultatsættet for en forespørgsel.
- Var denne tutorial nyttig?
- Ja Nej