Funkcia RANK v SQL Server je druh funkcie hodnotenia. Táto funkcia bude priraďte číslo každému riadku v rámci oddielu výstupu . Každému riadku priradí poradie ako jedna plus poradie predchádzajúceho riadku. Keď funkcia RANK nájde dve hodnoty, ktoré sú identické v rámci tej istej partície, priradí im rovnaké poradové číslo. Okrem toho, ďalšie číslo v poradí bude predchádzajúce poradie plus duplicitné čísla. Preto táto funkcia nie vždy priraďuje poradie riadkov v postupnom poradí.
Funkcia RANK je tiež súčasťou funkcií okna. Pri používaní tejto funkcie by ste mali pamätať na nasledujúce body :
- Vždy to funguje s klauzulou OVER().
- Každému riadku priradí poradie na základe klauzuly ORDER BY.
- Každému riadku priraďuje poradie v postupnom poradí.
- Riadkom vždy priradí poradie, počnúc číslom pre každý nový oddiel.
POZNÁMKA: Rank priradí dočasné hodnoty pre riadky v rámci oddielu, keď sa vykoná dotaz.
SQL Server poskytuje nasledujúce funkcie hodnotenia :
- RANK()
- ROW_NUMBER()
- DENSE_RANK()
- NTILE()
Poďme sa podrobne naučiť každú funkciu hodnotenia. Najprv si vytvoríme tabuľku na demonštráciu všetkých týchto funkcií. Nasledujúce príkazy vytvárajú tabuľku s názvom rank_demo s tromi stĺpcami:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Ďalej do tejto tabuľky vložíme niekoľko riadkov, ako je uvedené nižšie:
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');
Tabuľku môžeme overiť pomocou príkazu SELECT. Zobrazuje nasledujúci výstup:
Funkcia RANK().
Táto funkcia sa používa na určenie poradia pre každý riadok v sade výsledkov. Nasledujúca syntax ilustruje použitie funkcie RANK na serveri SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
V tejto syntaxi
- The klauzula OVER nastavuje rozdelenie a zoradenie výsledku pred použitím priradenej funkcie okna.
- The PARTTION BY rozdeľuje výstup produkovaný klauzulou FROM do oddielu. Potom sa funkcia použije na každý oddiel a znova sa inicializuje, keď hranica rozdelenia prekročí oddiely. Ak sme túto klauzulu nedefinovali, funkcia bude považovať všetky riadky za jeden oddiel.
- The ZORADIŤ PODĽA je povinná klauzula, ktorá určuje poradie riadkov zostupným alebo vzostupným spôsobom na základe jedného alebo viacerých názvov stĺpcov pred použitím funkcie.
Príklad
Pozrime sa, ako funguje funkcia RANK() na serveri SQL Server. Nasledujúce vyhlásenie použije funkciu hodnotenia na priradenie číslovania pre každý riadok:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Keďže sme nepoužili PARTTION BY , funkcia zaobchádzala s celým výsledkom ako s jedným oddielom. Po vykonaní príkazu sa zobrazí nasledujúci výstup:
V tomto výstupe môžeme vidieť, že niektoré riadky majú rovnakú pozíciu, pretože majú rovnakú hodnotu v mestský stĺpec . A ďalšie číslo v rebríčku bude jeho predchádzajúce poradie plus niekoľko duplicitných čísel.
Nasledujúce vyhlásenie je ďalší príklad kde budeme používať oddiel podľa klauzuly, ktorý rozdelí riadky na základe mesto stĺpec a priraďte poradie každému riadku v rámci oddielu. Poradie výstupu je založené na krstné meno :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Zobrazí nasledujúci výstup:
Funkcia ROW_NUMBER().
Táto funkcia sa používa vrátiť jedinečné poradové číslo pre každý riadok v rámci jeho oddielu. Číslovanie riadkov začína na jednej a zvyšuje sa o jednu, kým sa nedosiahne celkový počet riadkov oddielu. Vráti rôzne hodnosti pre riadok s podobnými hodnotami, ktoré ho odlišujú od funkcie RANK().
Nižšie uvedená syntax ilustruje použitie funkcie ROW_NUMBER() v SQL Server:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Príklad
Vykonajte nasledujúci dotaz na priradenie poradového čísla pre každý riadok:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
To pridelí poradie pre tabuľku podľa nich mesto . Tu vidíme, že priraďuje rôzne hodnosti pre riadok, ktorý má rovnaké hodnoty mesta.
Ak zmeníme poradie zoradenia z vzostupný až zostupný s klauzulou ORDER BY táto funkcia zodpovedajúcim spôsobom zmení aj RANK. Pozrite si nižšie uvedené vyhlásenie:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Tu je výsledok:
Funkcia DENSE_RANK().
Táto funkcia priraďuje jedinečné poradie pre každý riadok v rámci oddielu podľa zadanej hodnoty stĺpca bez medzier. Vždy určuje poradie v postupnom poradí. Ak dostaneme a duplicitná hodnota , táto funkcia mu priradí rovnaké poradie a ďalšie poradie je ďalšie poradové číslo. Táto charakteristika sa líši od funkcie DENSE_RANK() od funkcie RANK().
Nižšie uvedená syntax ilustruje použitie funkcie DENSE_RANK() v SQL Server:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Príklad
Nasledujúci dotaz používa funkciu DENSE_RANK() na priradenie poradového čísla pre každý riadok:
dátové štruktúry v jazyku Java
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Vráti nižšie uvedený výstup, kde môžeme vidieť, že duplicitné hodnoty majú rovnaké poradie a nasledujúce poradie bude ďalšie poradové číslo.
Je to ďalší príklad funkcie DENSE_RANK() s použitím klauzuly PARTITION BY. Táto klauzula rozdelí riadky na základe stĺpca mesta a poradie sady výsledkov je založené na krstnom_mene:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Získame výstup uvedený nižšie, pretože žiadne dva názvy nie sú rovnaké. V tomto prípade je výstup podobný funkcii RANK().
Aktualizujme názov nasledujúcim dotazom:
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Teraz vykonajte rovnaký dotaz znova. Uvidíme, že táto tabuľka dostala rovnaký názov Mesto Kalifornia . Preto je poradie rovnaké pre obe mená.
Funkcia NTILE(N).
Táto funkcia sa používa rozložiť riadky zoradeného oddielu do vopred definovaného počtu (N) približne rovnakých skupín. Každá skupina riadkov dostane svoje poradie na základe definovanej podmienky a začne číslovať od jednej skupiny. Prideľuje a číslo vedra pre každý riadok v skupine predstavujúcej skupinu, do ktorej patrí.
Nasledujúca syntax ilustruje použitie funkcie NTILE() v SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Príklad
Nasledujúci dotaz používa funkciu NTILE() na priradenie poradového čísla pre každý riadok:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
Uvedená tabuľka má osem záznamov . Preto, NTILE(3) hovorí, že množina výsledkov musí mať a skupina troch záznamov . Po vykonaní príkazu sa zobrazí nasledujúci výstup:
Tento článok vysvetlí všetky funkcie RANK používané v SQL Server s rôznymi príkladmi. Ukazuje tiež hlavné rozdiely medzi týmito funkciami. Tieto funkcie sú veľmi užitočné pre vývojárov, aby dobre preskúmali a spravovali svoje údaje.