logo

RANK funkcija SQL serveryje

RANK funkcija SQL serveryje yra savotiška reitingavimo funkcija. Ši funkcija bus priskirkite numerį kiekvienai išvesties skaidinio eilutei . Kiekvienai eilutei priskiriamas vienas ir ankstesnės eilutės reitingas. Kai funkcija RANK randa dvi identiškas reikšmes tame pačiame skaidinyje, ji priskiria joms tą patį eilės numerį. Be to, kitas reitingo numeris bus ankstesnis rangas ir pasikartojantys numeriai. Todėl ši funkcija ne visada priskiria eilučių eiliškumą iš eilės.

Funkcija RANK taip pat yra lango funkcijų dalis. Naudojant šią funkciją reikia atsiminti šiuos dalykus :

  • Jis visada veikia su OVER() sąlyga.
  • Kiekvienai eilutei priskiriamas rangas pagal ORDER BY sąlygą.
  • Kiekvienai eilutei iš eilės priskiriamas reitingas.
  • Jis visada priskiria eilėms reitingą, pradedant nuo vieno kiekvienam naujam skaidiniui.

PASTABA: Rankas priskiria laikinąsias reikšmes skaidinio eilutėms, kai vykdoma užklausa.

SQL Server teikia šias rango funkcijas :

  • RANK ()
  • ROW_NUMBER ()
  • DENSE_RANK()
  • TILE()

Išsamiai išmokime kiekvieną rango funkciją. Pirmiausia sukursime lentelę, kurioje parodysime visas šias funkcijas. Šie teiginiai sukuria lentelę pavadinimu rank_demo su trimis stulpeliais:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Toliau į šią lentelę įterpsime keletą eilučių, kaip nurodyta toliau:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

Lentelę galime patikrinti naudodami teiginį SELECT. Rodo toliau pateiktą išvestį:

RANK funkcija SQL serveryje

RANK() funkcija

Ši funkcija naudojama kiekvienos rezultatų rinkinio eilutės reitingui nustatyti. Ši sintaksė iliustruoja RANK funkcijos naudojimą SQL serveryje:

tinklas ir tinklo tipai
 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Šioje sintaksėje

  • The OVER sąlyga nustato rezultato skaidymą ir tvarką prieš taikant susijusią lango funkciją.
  • The SKYRIUS pagal sąlygą padalija išvestį, pagamintą pagal sąlygą FROM, į skaidinį. Tada funkcija taikoma kiekvienam skaidiniui ir iš naujo inicijuojama, kai skyriaus siena kerta skaidinius. Jei neapibrėžėme šios sąlygos, funkcija visas eilutes traktuos kaip vieną skaidinį.
  • The RŪŠIUOTI PAGAL yra būtina sąlyga, kuri nustato eilučių tvarką mažėjančia arba didėjančia tvarka pagal vieną ar daugiau stulpelių pavadinimų prieš taikant funkciją.

Pavyzdys

Pažiūrėkime, kaip funkcija RANK() veikia SQL serveryje. Toliau pateiktame teiginyje bus naudojama rango funkcija, kad kiekvienai eilutei priskirtų numeraciją:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Kadangi mes nenaudojome SKYRIUS pagal sąlygą , funkcija apdorojo visą rezultatą kaip vieną skaidinį. Vykdant pareiškimą bus rodoma toliau pateikta išvestis:

RANK funkcija SQL serveryje

Šiame išvestyje matome, kad kai kurios eilutės gauna tą patį reitingą, nes jų reikšmė yra tokia pati miesto kolona . Kitas numeris reitinge bus jo ankstesnis rangas ir daugybė pasikartojančių skaičių.

Toliau pateikiamas teiginys kitas pavyzdys kur ketiname naudoti skirsnį pagal sąlygą, kuri padalins eilutes pagal miestas stulpelį ir priskirti reitingą kiekvienai skaidinio eilutei. Išvesties tvarka pagrįsta Pirmas vardas :

vienas milijonas skaičiais
 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Jis parodys žemiau pateiktą išvestį:

RANK funkcija SQL serveryje

ROW_NUMBER() Funkcija

Ši funkcija naudojama grąžinkite unikalų kiekvienos eilutės eilės numerį jos pertvaroje. Eilučių numeracija prasideda nuo vieneto ir didėja vienu, kol pasiekiamas bendras skaidinio eilučių skaičius. Tai pateiks skirtingus eilutės, turinčios panašias reikšmes, kurios skiriasi nuo funkcijos RANK() rangus.

Toliau pateikta sintaksė iliustruoja funkcijos ROW_NUMBER() naudojimą SQL serveryje:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Pavyzdys

Vykdykite šią užklausą, kad kiekvienai eilutei priskirtumėte eilės numerį:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Jis paskirs lentelės reitingą pagal jų miestas . Čia matome, kad eilutei, kurios miesto reikšmės yra vienodos, ji priskiria skirtingus rangus.

RANK funkcija SQL serveryje

Jei pakeisime rūšiavimo tvarką nuo kylant į mažėjantį su sąlyga ORDER BY, ši funkcija atitinkamai pakeis RANK. Žiūrėkite toliau pateiktą pareiškimą:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Štai rezultatas:

RANK funkcija SQL serveryje

DENSE_RANK() Funkcija

Ši funkcija priskiria unikalus kiekvienos skaidinio eilutės reitingas pagal nurodytą stulpelio vertę be jokių spragų. Jis visada nurodo reitingą iš eilės. Jei gausime a pasikartojančios vertės , ši funkcija priskirs jam tą patį rangą, o kitas rangas bus kitas eilės numeris. Ši charakteristika skiriasi DENSE_RANK() funkcija nuo RANK() funkcijos.

Toliau pateikta sintaksė iliustruoja funkcijos DENSE_RANK() naudojimą SQL serveryje:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Pavyzdys

Šioje užklausoje naudojama funkcija DENSE_RANK() kiekvienai eilutei priskirti eilės numerį:

python įrašyti json į failą
 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Jis grąžins toliau pateiktą išvestį, kurioje pamatysime, kad pasikartojančios reikšmės turi tą patį rangą, o kitas rangas bus kitas eilės numeris.

RANK funkcija SQL serveryje

Tai dar vienas funkcijos DENSE_RANK() pavyzdys, naudojant sąlygą PARTITION BY. Ši sąlyga padalys eilutes pagal miesto stulpelį, o rezultatų rinkinio tvarka bus pagrįsta pirmu_pavadinimu:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Gausime žemiau pateiktą išvestį, nes nėra dviejų vienodų pavadinimų. Šiuo atveju išvestis yra panaši į RANK() funkciją.

RANK funkcija SQL serveryje

Atnaujinkime pavadinimą naudodami šią užklausą:

pandos loc
 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Dabar dar kartą vykdykite tą pačią užklausą. Pamatysime, kad ši lentelė gavo tą patį pavadinimą Kalifornijos miestas . Todėl abiejų pavadinimų rangas taip pat yra vienodas.

RANK funkcija SQL serveryje

NTILE(N) funkcija

Ši funkcija naudojama paskirstyti užsakyto skirsnio eilutes į iš anksto nustatytą skaičių (N) maždaug vienodų grupių. Kiekviena eilučių grupė gauna savo reitingą pagal apibrėžtą sąlygą ir pradeda numeruoti nuo vienos grupės. Ji priskiria a kibiro numeris kiekvienai grupės, kuriai ji priklauso, eilutei.

Ši sintaksė iliustruoja NTILE() funkcijos naudojimą SQL serveryje:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Pavyzdys

Šioje užklausoje naudojama funkcija NTILE() kiekvienai eilutei priskirti eilės numerį:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Nurodytoje lentelėje yra aštuoni rekordai . Todėl, TILE(3) nurodo, kad rezultatų rinkinyje turi būti a trijų rekordų grupė . Vykdant pareiškimą bus rodoma toliau pateikta išvestis:

RANK funkcija SQL serveryje

Šiame straipsnyje įvairiais pavyzdžiais bus paaiškintos visos RANK funkcijos, naudojamos SQL serveryje. Tai taip pat parodo pagrindinius šių funkcijų skirtumus. Šios funkcijos yra labai naudingos kūrėjams, norint gerai ištirti ir valdyti savo duomenis.