Hvordan bruke SQL Server Row -nummeret

Hvordan bruke SQL Server Row -nummeret
I de fleste tilfeller, når vi trenger å nummerere elementer i en database, hopper vi til identitetseiendommen. Hva som skjer når du trenger å nummerere radene til et resultat? Det er her radnummerfunksjonen kommer inn.

Radnummerfunksjonen lar deg tilordne et sekvensielt nummer til hver rad som et resultat av en SQL -spørring.

ROW_NUMBER () -funksjonen er en del av SQL Server -vindusfunksjonene. Ved hjelp av denne funksjonen kan du tilordne et progressivt heltall til hver rad på hvert partisjonssett med et resultat. Hvert nummer starter på 1 og tilbakestiller for radene i hver partisjon.

Funksjonssyntaks og returverdi

Funksjonens syntaks er som vist:

ROW_NUMBER ()
Over (partisjon etter partisjon_ekspression
Bestill etter ordre_by_ekspression
);

La oss bryte ned syntaks ovenfor.

  1. Partisjon av - Partisjonen etter klausul lar deg dele resultatet ditt satt inn i forskjellige logiske partisjoner. Row_number -funksjonen blir deretter brukt på hver partisjon. Partisjonen etter parameter er valgfri, og hvis ikke spesifisert, vil Row_number -funksjonen behandle det resulterende settet som en eneste partisjon.
  2. Bestillingen etter leddet gir deg sorteringsordren for radene i hvert partisjonssett. I motsetning til partisjonen etter klausul, krever Row_number-funksjonen denne klausulen som en ordrefølsom funksjon.

Funksjonen returnerer ved å tilordne et sekvensielt nummer til radene i hver partisjon. Som nevnt vil funksjonen tilbakestille radnummeret for hver nye partisjon.

SQL Server Row_number (): Eksempler

La oss bruke et eksempel for å forstå bedre hvordan du bruker Row_Number () -funksjonen. Begynn med å opprette en eksempeldatabase med dummy -data som vist i spørsmålene nedenfor:

Opprett databasedummy_db;
Bruk dummy_db;
Lag tabell dummy_table (
id int ikke null identitet (1,1) primærnøkkel,
FirstName varchar (50),
LastName Varchar (50),
E -post varchar (100),
Lønnspenger,
Avdelingen varchar (50)
);
Sett inn Dummy_Table (FirstName, LastName, E -post, lønn, avdeling)
Verdier ('Karen', 'Colmen', '[email protected] ', $ 149000,' Game Development '),
('Alex', 'Bell', '[email protected] ', $ 150000,' Graphics Development '),
('Charles', 'Johnson', '[email protected] ', $ 120500,' DevOps Development '),
('Bruce', 'Greer', '[email protected] ', $ 118000,' sikkerhetsutvikling '),
('Sarah', 'Austin', '[email protected] ', $ 165000,' Game Development '),
('Diana', 'Kim', '[email protected] ', $ 105000,' front-end utvikling '),
('Peter', 'Cogh', '[email protected] ', $ 100000,' Graphics Development '),
('David', 'Hugh', '[email protected] ', $ 126000,' Database Development '),
('Tobias', 'Newne', '[email protected] ', $ 115500,' Database Development '),
('Winnie', 'Lorentz', '[email protected] ', $ 175000,' Graphics Development '),
('Guy', 'Miche', '[email protected] ', $ 145000,' Game Development ');
Velg * fra Dummy_Table;

Ovennevnte spørring skal returnere et resulterende sett som vist:

Eksempel 1

Følgende SQL -setning bruker Row_number -funksjonen for å tilordne et sekvensielt nummer til radene i det resulterende settet:

Velg Row_number () over (
Bestilling etter lønn) som rad_num,
fornavn,
etternavn,
avdeling
Fra dummy_table;

Ovennevnte spørring skal returnere et resultatsett som vist nedenfor:

Eksempel 2

Vi kan bruke Row_number -funksjonen til å finne den ansatte med høyeste lønn i en bestemt avdeling.

Tenk på eksemplet som er vist nedenfor:

Velg FirstName, LastName, Lønn, avdeling, ROW_NUMBER () over (Partisjon etter avdelingsordre etter lønn DESC) som ROW_NUM FRA DUMMY_TABLE;

Spørringen over deler dataene i logiske partisjoner basert på avdelingen. Vi bruker deretter Row_number () -funksjonen på bestilling etter lønnen i synkende rekkefølge.

Eksempel 3

Du kan bruke Row_number -funksjonen for paginering. Siden Row_number -funksjonen tildeler et sekvensielt nummer til alle radene, kan vi bruke det til å filtrere for et bestemt antall resultater per side.

Ta eksemplet nedenfor:

Velg * fra
(Velg ROW_NUMBER ()
Over (ordre etter lønn) som ROW_NUM, FIRSTNAME, LASTNAME, avdeling
Fra dummy_table) dt
Hvor rad_num> = 1 og rad_num <= 5;

Ovennevnte spørring skal returnere en utdata som:

Konklusjon

I denne guiden diskuterte vi hvordan du bruker SQL Server Row_number () -funksjonen for å tilordne sekvensielle tall til radene i et resultatsett. I tillegg gjennomgikk vi funksjonssyntaks og returverdi. Vi håper du fant denne artikkelen nyttig. Sjekk ut flere Linux -hint -artikler for tips og opplæringsprogrammer.