Funkcija RANK u SQL Serveru je vrsta funkcije rangiranja. Ova funkcija će dodijeliti broj svakom retku unutar particije izlaza . Svakom retku dodjeljuje rang kao jedan plus rang prethodnog retka. Kada funkcija RANK pronađe dvije vrijednosti koje su identične unutar iste particije, dodjeljuje im isti broj ranga. Osim toga, sljedeći broj u poretku bit će prethodni rang plus dupli brojevi. Stoga ova funkcija ne dodjeljuje uvijek poredak redova uzastopnim redoslijedom.
Funkcija RANK također je poddio prozorskih funkcija. Tijekom korištenja ove funkcije treba zapamtiti sljedeće točke :
- Uvijek radi s klauzulom OVER().
- Svakom retku dodjeljuje rang na temelju klauzule ORDER BY.
- Dodjeljuje rang svakom retku uzastopnim redoslijedom.
- Uvijek dodjeljuje rang redovima, počevši s jednim za svaku novu particiju.
NAPOMENA: Rang dodjeljuje privremene vrijednosti za retke unutar particije kada se upit izvrši.
SQL Server pruža sljedeće funkcije rangiranja :
- RANG()
- ROW_NUMBER()
- DENSE_RANK()
- NTILE()
Naučimo detaljno svaku funkciju rangiranja. Prvo ćemo napraviti tablicu za demonstraciju svih ovih funkcija. Sljedeće izjave stvaraju tablicu pod nazivom rang_demo sa tri stupca:
string.replaceall java
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Zatim ćemo u ovu tablicu umetnuti neke retke kao u nastavku:
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');
Tablicu možemo provjeriti pomoću naredbe SELECT. Prikazuje donji izlaz:
Funkcija RANK().
Ova se funkcija koristi za određivanje ranga za svaki redak u skupu rezultata. Sljedeća sintaksa ilustrira upotrebu funkcije RANK u SQL Serveru:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
U ovoj sintaksi,
- The OVER klauzula postavlja particioniranje i poredak rezultata prije nego što se pridružena prozorska funkcija primijeni.
- The PARTITION BY klauzula dijeli izlaz koji proizvodi klauzula FROM u particiju. Tada se funkcija primjenjuje na svaku particiju i ponovno inicijalizira kada granica podjele prijeđe particije. Ako nismo definirali ovu klauzulu, funkcija će tretirati sve retke kao jednu particiju.
- The NARUČI PO je obavezna klauzula koja određuje redoslijed redaka na silazni ili uzlazni način na temelju naziva jednog ili više stupaca prije primjene funkcije.
Primjer
Pogledajmo kako funkcija RANK() radi u SQL Serveru. Donja izjava koristit će funkciju rangiranja za dodjelu numeriranja za svaki redak:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Budući da nismo koristili PARTITION BY klauzula , funkcija je cijeli rezultat tretirala kao jednu particiju. Izvršenje naredbe prikazat će donji izlaz:
U ovom izlazu možemo vidjeti da neki od redaka dobivaju isti rang jer imaju istu vrijednost u gradski stupac . A sljedeći broj na ljestvici bit će njegov prethodni rang plus određeni broj dvostrukih brojeva.
java util datum
Sljedeća izjava je još jedan primjer gdje ćemo koristiti particiju po klauzulu koja će podijeliti retke na temelju Grad stupcu i dodijelite rangiranje svakom retku unutar particije. Redoslijed izlaza temelji se na ime :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Prikazat će se sljedeći izlaz:
ssh puni oblik
Funkcija ROW_NUMBER().
Ova funkcija se koristi za vrati jedinstveni redni broj za svaki red unutar svoje pregrade. Numeriranje redaka počinje od jedan i povećava se za jedan dok se ne dosegne ukupan broj redaka particije. Vratit će različite rangove za redak koji ima slične vrijednosti koje ga čine različitim od funkcije RANK().
Donja sintaksa ilustrira upotrebu funkcije ROW_NUMBER() u SQL Serveru:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Primjer
Izvršite sljedeći upit da dodijelite redni broj za svaki redak:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Dodijelit će poredak za tablicu prema njihovom Grad . Ovdje možemo vidjeti da dodjeljuje različite rangove za redak koji ima iste vrijednosti grada.
Ako promijenimo redoslijed sortiranja iz uzlazno prema silazno s klauzulom ORDER BY, ova funkcija će također promijeniti RANK u skladu s tim. Pogledajte izjavu u nastavku:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Evo rezultata:
Funkcija DENSE_RANK().
Ova funkcija dodjeljuje jedinstveni rang za svaki red unutar particije prema navedenoj vrijednosti stupca bez ikakvih praznina. Uvijek navodi poredak uzastopnim redoslijedom. Ako dobijemo a duplicirana vrijednost , ova funkcija će mu dodijeliti isti rang, a sljedeći rang je sljedeći redni broj. Ova karakteristika razlikuje funkciju DENSE_RANK() od funkcije RANK().
char u int
Donja sintaksa ilustrira upotrebu funkcije DENSE_RANK() u SQL Serveru:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Primjer
Sljedeći upit koristi funkciju DENSE_RANK() za dodjelu broja ranga za svaki redak:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Vratit će donji izlaz gdje možemo vidjeti da duplicirane vrijednosti imaju isti rang, a sljedeći rang bit će sljedeći redni broj.
To je još jedan primjer funkcije DENSE_RANK() korištenjem klauzule PARTITION BY. Ova će klauzula podijeliti retke na temelju stupca grada, a redoslijed skupa rezultata temelji se 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;
Dobit ćemo rezultat ispod jer ne postoje dva ista imena. U ovom slučaju, izlaz je sličan funkciji RANK().
Ažurirajmo naziv sljedećim upitom:
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Sada ponovno izvršite isti upit. Vidjet ćemo da je ova tablica dobila isto ime u California City . Stoga je rang također isti za oba imena.
Funkcija NTILE(N).
Ova funkcija se koristi za rasporediti retke uređene particije u unaprijed definirani broj (N) približno jednakih skupina. Svaka grupa redova dobiva svoj rang na temelju definiranog uvjeta i počinje numerirati od jedne grupe. Dodjeljuje a broj kante za svaki redak u skupini koja predstavlja skupinu kojoj pripada.
kat timpf visina
Sljedeća sintaksa ilustrira upotrebu funkcije NTILE() u SQL Serveru:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Primjer
Sljedeći upit koristi funkciju NTILE() za dodjelu rang broja za svaki redak:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
Navedena tablica ima osam zapisa . Stoga, NTILE (3) govori da skup rezultata mora imati a skupina od tri zapisa . Izvršenje naredbe prikazat će donji izlaz:
Ovaj će članak objasniti sve funkcije RANK koje se koriste u SQL Serveru s raznim primjerima. Također pokazuje glavne razlike između ovih funkcija. Ove su funkcije vrlo korisne programerima za dobro istraživanje i upravljanje podacima.