RANK funkcija SQL Server ir sava veida ranžēšanas funkcija. Šī funkcija veiks piešķiriet numuru katrai rindai izvades nodalījumā . Tas piešķir katrai rindai rangu kā vienu plus iepriekšējās rindas rangu. Kad funkcija RANK atrod divas identiskas vērtības vienā nodalījumā, tā piešķir tām vienu un to pašu ranga numuru. Turklāt nākamais numurs rangā būs iepriekšējais rangs plus dublikātu numuri. Tāpēc šī funkcija ne vienmēr piešķir rindu ranžēšanu pēc kārtas.
Funkcija RANK ir arī logu funkciju apakšdaļa. Lietojot šo funkciju, ir jāatceras šādi punkti :
- Tas vienmēr darbojas ar OVER() klauzulu.
- Tas katrai rindai piešķir rangu, pamatojoties uz klauzulu ORDER BY.
- Tas piešķir rangu katrai rindai secīgā secībā.
- Tas vienmēr piešķir rindām rangu, sākot ar vienu katram jaunajam nodalījumam.
PIEZĪME. Kad vaicājums tiek izpildīts, Rangs piešķir pagaidu vērtības nodalījuma rindām.
SQL Server nodrošina šādas ranga funkcijas :
- RANK()
- ROW_NUMBER()
- DENSE_RANK()
- TILE()
Ļaujiet mums sīkāk apgūt katru ranga funkciju. Pirmkārt, mēs izveidosim tabulu visu šo funkciju demonstrēšanai. Šie apgalvojumi izveido tabulu ar nosaukumu rank_demo ar trim kolonnām:
kārtot masīvu sarakstu java
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Tālāk mēs šajā tabulā ievietosim dažas rindas, kā norādīts tālāk.
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');
Mēs varam pārbaudīt tabulu, izmantojot SELECT priekšrakstu. Tas parāda tālāk norādīto izvadi:
RANK() funkcija
Šo funkciju izmanto, lai noteiktu katras rezultātu kopas rindas rangu. Tālāk norādītā sintakse ilustrē RANK funkcijas izmantošanu SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Šajā sintaksē
- The OVER klauzula iestata rezultāta sadalīšanu un secību, pirms tiek lietota saistītā loga funkcija.
- The NODAĻA PĒC klauzulas sadala nodalījumā izvadi, ko rada klauzula FROM. Pēc tam funkcija tiek lietota katram nodalījumam un tiek atkārtoti inicializēta, kad nodalījuma robeža šķērso nodalījumus. Ja mēs neesam definējuši šo klauzulu, funkcija visas rindas apstrādās kā vienu nodalījumu.
- The SAKĀRTOT PĒC ir obligāta klauzula, kas nosaka rindu secību dilstošā vai augošā veidā, pamatojoties uz vienu vai vairākiem kolonnu nosaukumiem, pirms tiek lietota funkcija.
Piemērs
Ļaujiet mums redzēt, kā funkcija RANK() darbojas SQL Server. Tālāk sniegtajā paziņojumā tiks izmantota ranga funkcija, lai katrai rindai piešķirtu numerāciju:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Tā kā mēs neesam izmantojuši NODAĻA PĒC klauzulas , funkcija visu rezultātu apstrādāja kā vienu nodalījumu. Izpildot paziņojumu, tiks parādīta šāda izvade:
Šajā izvadē mēs redzam, ka dažas rindas iegūst vienādu rangu, jo tām ir vienāda vērtība pilsētas kolonna . Nākamais ranga numurs būs tā iepriekšējais rangs plus vairāki dublēti numuri.
salīdzināms interfeiss java
Nākamais paziņojums ir cits piemērs kur mēs izmantosim nodalījumu ar klauzulu, kas sadalīs rindas, pamatojoties uz pilsēta kolonnu un piešķiriet ranžējumu katrai nodalījuma rindai. Izvades secība ir balstīta uz vārds :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Tas parādīs tālāk norādīto izvadi:
diskete
ROW_NUMBER() Funkcija
Šī funkcija tiek izmantota atgriež unikālo kārtas numuru katrai rindai tās nodalījumā. Rindu numerācija sākas ar vienu un palielinās par vienu, līdz tiek sasniegts nodalījuma kopējais rindu skaits. Tas atgriezīs dažādas rindas rindas ar līdzīgām vērtībām, kas atšķirs to no funkcijas RANK().
Tālāk sniegtā sintakse ilustrē ROW_NUMBER() funkcijas izmantošanu SQL Server:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Piemērs
Izpildiet šo vaicājumu, lai katrai rindai piešķirtu kārtas numuru:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Tas piešķirs tabulai rangu atbilstoši viņu prasībām pilsēta . Šeit mēs redzam, ka rindai, kurai ir vienādas pilsētas vērtības, tiek piešķirtas dažādas pakāpes.
Ja mainīsim šķirošanas secību no augšupejoša uz dilstoša ar klauzulu ORDER BY, šī funkcija attiecīgi mainīs arī RANK. Skatiet tālāk sniegto paziņojumu:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Lūk, rezultāts:
DENSE_RANK() Funkcija
Šī funkcija piešķir unikāls rangs katrai nodalījuma rindai atbilstoši norādītajai kolonnas vērtībai bez atstarpēm. Tas vienmēr norāda rangu secīgā secībā. Ja mēs saņemam a dublikāta vērtība , šī funkcija piešķirs tai tādu pašu rangu, un nākamais rangs būs nākamais kārtas numurs. Šis raksturlielums atšķiras no funkcijas DENSE_RANK() no funkcijas RANK().
git statuss
Tālāk sniegtā sintakse ilustrē funkcijas DENSE_RANK() izmantošanu SQL Server:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Piemērs
Šis vaicājums izmanto funkciju DENSE_RANK(), lai katrai rindai piešķirtu ranga numuru:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Tas atgriezīs tālāk norādīto izvadi, kurā mēs varam redzēt, ka dublētajām vērtībām ir vienāds rangs, un nākamais rangs būs nākamais kārtas numurs.
Tas ir vēl viens funkcijas DENSE_RANK() piemērs, izmantojot klauzulu PARTITION BY. Šī klauzula sadalīs rindas, pamatojoties uz pilsētas kolonnu, un rezultātu kopas secība ir balstīta uz first_name:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Mēs iegūsim zemāk esošo izvadi, jo nav divu vienādu nosaukumu. Šajā gadījumā izvade ir līdzīga funkcijai RANK().
Atjaunināsim nosaukumu ar šādu vaicājumu:
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Tagad vēlreiz izpildiet to pašu vaicājumu. Mēs redzēsim, ka šai tabulai ir tāds pats nosaukums Kalifornijas pilsēta . Tāpēc arī rangs abiem vārdiem ir vienāds.
TILE(N) funkcija
Šī funkcija tiek izmantota sadalīt sakārtotā nodalījuma rindas iepriekš noteiktā skaitā (N) no aptuveni vienādām grupām. Katra rindu grupa iegūst savu rangu, pamatojoties uz definēto nosacījumu, un sāk numerāciju no vienas grupas. Tas piešķir a kausa numurs katrai rindai grupā, kas pārstāv grupu, kurai tā pieder.
slēptās lietotnes
Tālāk norādītā sintakse ilustrē NTILE() funkcijas izmantošanu SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Piemērs
Šis vaicājums izmanto funkciju NTILE(), lai katrai rindai piešķirtu ranga numuru:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
Norādītajā tabulā ir astoņi ieraksti . Tāpēc, TILE(3) norāda, ka rezultātu kopā jābūt a trīs ierakstu grupa . Izpildot paziņojumu, tiks parādīta šāda izvade:
Šajā rakstā ar dažādiem piemēriem tiks izskaidrotas visas SQL serverī izmantotās RANK funkcijas. Tas parāda arī galvenās atšķirības starp šīm funkcijām. Šīs funkcijas ir ļoti noderīgas izstrādātājiem, lai labi izpētītu un pārvaldītu savus datus.