logo

Funkcija RANK v strežniku SQL

Funkcija RANK v strežniku SQL je neke vrste funkcija rangiranja. Ta funkcija bo dodelite številko vsaki vrstici znotraj particije izhoda . Vsaki vrstici dodeli rang kot ena plus prejšnji rang vrstice. Ko funkcija RANK najde dve vrednosti, ki sta enaki znotraj iste particije, jima dodeli isto številko ranga. Poleg tega bo naslednja številka na lestvici prejšnja uvrstitev plus podvojene številke. Zato ta funkcija ne dodeli vedno razvrstitve vrstic v zaporednem vrstnem redu.

Funkcija RANK je tudi poddel okenskih funkcij. Pri uporabi te funkcije si morate zapomniti naslednje točke :

  • Vedno deluje s klavzulo OVER().
  • Vsaki vrstici dodeli rang na podlagi klavzule ORDER BY.
  • Vsaki vrstici v zaporednem vrstnem redu dodeli rang.
  • Vrsticam vedno dodeli rang, začenši z enim za vsako novo particijo.

OPOMBA: Rank dodeli začasne vrednosti za vrstice znotraj particije, ko se poizvedba izvede.

SQL Server ponuja naslednje funkcije rangiranja :

  • RANK()
  • ROW_NUMBER()
  • DENSE_RANK()
  • NTILE()

Naučimo se podrobneje o vsaki funkciji rangiranja. Najprej bomo izdelali tabelo za predstavitev vseh teh funkcij. Naslednji stavki ustvarijo tabelo z imenom rank_demo s tremi stolpci:

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

Nato bomo v to tabelo vstavili nekaj vrstic, kot je prikazano spodaj:

vadnica za selen
 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'); 

Tabelo lahko preverimo s stavkom SELECT. Prikaže spodnji rezultat:

Funkcija RANK v strežniku SQL

Funkcija RANK().

Ta funkcija se uporablja za določanje ranga za vsako vrstico v naboru rezultatov. Naslednja sintaksa ponazarja uporabo funkcije RANK v strežniku SQL Server:

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

V tej sintaksi

  • The OVER klavzula nastavi razdelitev in vrstni red rezultata, preden se uporabi povezana okenska funkcija.
  • The PARTITION BY klavzula razdeli izhod, ki ga proizvede klavzula FROM, v particijo. Nato se funkcija uporabi za vsako particijo in ponovno inicializira, ko meja delitve prečka particijo. Če tega stavka nismo definirali, bo funkcija obravnavala vse vrstice kot eno samo particijo.
  • The NAROČI PO je zahtevana klavzula, ki določa vrstni red vrstic v padajočem ali naraščajočem načinu na podlagi enega ali več imen stolpcev, preden se funkcija uporabi.

Primer

Poglejmo, kako deluje funkcija RANK() v SQL Serverju. Spodnja izjava bo uporabila funkcijo rangiranja za dodelitev oštevilčenja za vsako vrstico:

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

Ker nismo uporabljali PARTITION BY klavzula , je funkcija obravnavala celoten rezultat kot eno samo particijo. Izvedba stavka bo prikazala spodnji rezultat:

Funkcija RANK v strežniku SQL

V tem rezultatu lahko vidimo, da nekatere vrstice dobijo enak rang, ker imajo enako vrednost v mestni stolpec . In naslednja številka na lestvici bo njegova prejšnja uvrstitev plus število podvojenih številk.

Naslednja izjava je drug primer kjer bomo uporabili klavzulo particije, ki bo razdelila vrstice glede na mesto in dodelite uvrstitev vsaki vrstici znotraj particije. Vrstni red izhoda temelji na ime :

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

Prikazal bo spodnji rezultat:

Funkcija RANK v strežniku SQL

Funkcija ROW_NUMBER().

Ta funkcija se uporablja za vrne edinstveno zaporedno številko za vsako vrstico znotraj svoje particije. Številčenje vrstic se začne pri ena in se povečuje za eno, dokler ni doseženo skupno število vrstic particije. Vrnila bo različne uvrstitve za vrstico s podobnimi vrednostmi, zaradi katerih se razlikuje od funkcije RANK().

formatni niz java

Spodnja sintaksa ponazarja uporabo funkcije ROW_NUMBER() v strežniku SQL Server:

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

Primer

Izvedite naslednjo poizvedbo, da vsaki vrstici dodelite zaporedno številko:

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

Dodelil bo razvrstitev za tabelo glede na njihovo mesto . Tukaj lahko vidimo, da vrstici, ki ima enake vrednosti mesta, dodeli različne range.

Funkcija RANK v strežniku SQL

Če spremenimo vrstni red razvrščanja iz naraščajoče do padajoče s klavzulo ORDER BY bo ta funkcija ustrezno spremenila tudi RANK. Oglejte si spodnjo izjavo:

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

Tukaj je rezultat:

Funkcija RANK v strežniku SQL

Funkcija DENSE_RANK().

Ta funkcija dodeljuje edinstven rang za vsako vrstico znotraj particije glede na navedeno vrednost stolpca brez vrzeli. Vedno določa razvrstitev v zaporednem vrstnem redu. Če dobimo a podvojena vrednost , mu bo ta funkcija dodelila enak rang, naslednji rang pa bo naslednja zaporedna številka. Ta lastnost razlikuje funkcijo DENSE_RANK() od funkcije RANK().

status git

Spodnja sintaksa ponazarja uporabo funkcije DENSE_RANK() v strežniku SQL Server:

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

Primer

Naslednja poizvedba uporablja funkcijo DENSE_RANK() za dodelitev rang številke za vsako vrstico:

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

Vrnil bo spodnji izhod, kjer lahko vidimo, da imajo podvojene vrednosti enak rang, naslednji rang pa bo naslednja zaporedna številka.

Funkcija RANK v strežniku SQL

To je še en primer funkcije DENSE_RANK() z uporabo klavzule PARTITION BY. Ta člen bo razdelil vrstice glede na stolpec mesta, vrstni red nabora rezultatov pa temelji na first_name:

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

Dobili bomo spodnji rezultat, ker nobeno ime ni enako. V tem primeru je rezultat podoben funkciji RANK().

Funkcija RANK v strežniku SQL

Posodobimo ime z naslednjo poizvedbo:

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

Zdaj znova izvedite isto poizvedbo. Videli bomo, da je ta tabela dobila isto ime California City . Zato je tudi rang enak za obe imeni.

Funkcija RANK v strežniku SQL

Funkcija NTILE(N).

Ta funkcija se uporablja za porazdeli vrstice urejene particije v vnaprej določeno število (N) približno enakih skupin. Vsaka skupina vrstic dobi svoj rang na podlagi definiranega pogoja in začne številčenje od ene skupine. Dodeljuje a številka vedra za vsako vrstico v skupini, ki predstavlja skupino, ki ji pripada.

Naslednja sintaksa ponazarja uporabo funkcije NTILE() v strežniku SQL Server:

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

Primer

čakalna vrsta in prednostna čakalna vrsta v Javi

Naslednja poizvedba uporablja funkcijo NTILE() za dodelitev rang številke za vsako vrstico:

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

Navedena tabela ima osem zapisov . Zato je NTILE (3) pove, da mora niz rezultatov imeti a skupina treh zapisov . Izvedba stavka bo prikazala spodnji rezultat:

Funkcija RANK v strežniku SQL

Ta članek bo z različnimi primeri razložil vse funkcije RANK, ki se uporabljajo v strežniku SQL Server. Prikazuje tudi glavne razlike med tema funkcijama. Te funkcije so zelo uporabne za razvijalce za dobro raziskovanje in upravljanje svojih podatkov.