Funkce RANK v SQL Server je druh funkce hodnocení. Tato funkce bude přiřaďte číslo každému řádku v oddílu výstupu . Každému řádku přiřadí pořadí jako jedna plus pořadí předchozího řádku. Když funkce RANK najde dvě hodnoty, které jsou identické v rámci stejného oddílu, přiřadí jim stejné číslo pořadí. Kromě toho bude dalším číslem v žebříčku předchozí hodnost plus duplicitní čísla. Proto tato funkce ne vždy přiřazuje pořadí řádků v po sobě jdoucím pořadí.
Funkce RANK je také dílčí částí okenních funkcí. Při používání této funkce je třeba mít na paměti následující body :
do řetězce
- Vždy funguje s klauzulí OVER().
- Každému řádku přiřadí pořadí na základě klauzule ORDER BY.
- Každému řádku přiřadí pořadí v po sobě jdoucím pořadí.
- Řádkům vždy přiřadí pořadí, počínaje jedničkou pro každý nový oddíl.
POZNÁMKA: Pořadí přiřadí dočasné hodnoty pro řádky v rámci oddílu, když je dotaz spuštěn.
SQL Server poskytuje následující funkce hodnocení :
- HODNOST()
- ROW_NUMBER()
- DENSE_RANK()
- NTILE()
Pojďme se podrobně naučit každou funkci hodnosti. Nejprve si vytvoříme tabulku pro demonstraci všech těchto funkcí. Následující příkazy vytvoří tabulku s názvem rank_demo se třemi sloupci:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
Dále do této tabulky vložíme několik řádků, jak je uvedeno níže:
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');
Tabulku můžeme ověřit pomocí příkazu SELECT. Zobrazí následující výstup:
Funkce RANK().
Tato funkce se používá k určení pořadí pro každý řádek v sadě výsledků. Následující syntaxe ilustruje použití funkce RANK v SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
V této syntaxi
- The klauzule OVER nastavuje rozdělení a řazení výsledku před použitím přidružené funkce okna.
- The PARTICE BY klauzule rozděluje výstup vytvořený klauzulí FROM do oddílu. Poté se funkce aplikuje na každý oddíl a znovu se inicializuje, když hranice oddílu překročí oddíly. Pokud jsme tuto klauzuli nedefinovali, bude funkce považovat všechny řádky za jeden oddíl.
- The SEŘADIT PODLE je povinná klauzule, která určuje pořadí řádků sestupně nebo vzestupně na základě jednoho nebo více názvů sloupců před použitím funkce.
Příklad
Podívejme se, jak funguje funkce RANK() v SQL Server. Níže uvedený příkaz použije funkci pořadí k přiřazení číslování pro každý řádek:
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Vzhledem k tomu, že jsme nepoužívali PARTICE BY klauzule , funkce považovala celý výsledek za jeden oddíl. Po provedení příkazu se zobrazí následující výstup:
V tomto výstupu můžeme vidět, že některé řádky mají stejnou hodnotu, protože mají stejnou hodnotu v městský sloup . A další číslo v žebříčku bude jeho předchozí hodnost plus počet duplicitních čísel.
Následující prohlášení je další příklad kde budeme používat oddíl podle klauzule, který rozdělí řádky na základě město sloupec a přiřadit hodnocení každému řádku v rámci oddílu. Pořadí výstupu je založeno na jméno :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Zobrazí následující výstup:
Funkce ROW_NUMBER().
Tato funkce se používá vrátit jedinečné pořadové číslo pro každý řádek v rámci jeho oddílu. Číslování řádků začíná na jedné a zvyšuje se o jednu, dokud není dosaženo celkového počtu řádků oddílu. Vrátí různé úrovně pro řádek s podobnými hodnotami, které jej odlišují od funkce RANK().
Níže uvedená syntaxe ilustruje použití funkce ROW_NUMBER() v SQL Server:
výlet ale
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Příklad
Proveďte následující dotaz pro přiřazení pořadového čísla pro každý řádek:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
To přiřadí pořadí pro tabulku podle jejich město . Zde vidíme, že přiděluje různé hodnosti pro řádek, který má stejné hodnoty města.
náhodné číslo v java
Pokud změníme pořadí řazení z vzestupně sestupně s klauzulí ORDER BY tato funkce také odpovídajícím způsobem změní RANK. Viz níže uvedené prohlášení:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Zde je výsledek:
Funkce DENSE_RANK().
Tato funkce přiřazuje jedinečné pořadí pro každý řádek v rámci oddílu podle zadané hodnoty sloupce bez mezer. Vždy určuje pořadí v po sobě jdoucím pořadí. Pokud dostaneme a duplicitní hodnota , tato funkce mu přiřadí stejné pořadí a další pořadí je dalším pořadovým číslem. Tato charakteristika se liší funkce DENSE_RANK() od funkce RANK().
Níže uvedená syntaxe ilustruje použití funkce 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;
Příklad
Následující dotaz používá funkci DENSE_RANK() k přiřazení čísla pořadí pro každý řádek:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Vrátí níže uvedený výstup, kde můžeme vidět, že duplicitní hodnoty mají stejné pořadí a následující pořadí bude dalším pořadovým číslem.
Je to další příklad funkce DENSE_RANK() pomocí klauzule PARTITION BY. Tato klauzule rozdělí řádky na základě sloupce města a pořadí sady výsledků je založeno na křestním_jménu:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Získáme níže uvedený výstup, protože žádná dvě jména nejsou stejná. V tomto případě je výstup podobný funkci RANK().
Upravme název pomocí následujícího dotazu:
smtp internetový protokol
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Nyní proveďte stejný dotaz znovu. Uvidíme, že tato tabulka dostala stejný název Kalifornské město . Hodnost je tedy u obou jmen stejná.
Funkce NTILE(N).
Tato funkce se používá rozdělit řádky uspořádaného oddílu do předem definovaného počtu (N) přibližně stejných skupin. Každá skupina řádků získá své pořadí na základě definované podmínky a začne číslovat od jedné skupiny. Přiděluje a číslo kbelíku pro každý řádek ve skupině představující skupinu, do které patří.
Následující syntaxe ilustruje použití funkce NTILE() v SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Příklad
Následující dotaz používá funkci NTILE() k přiřazení čísla pořadí pro každý řádek:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
Zadaná tabulka má osm záznamů . Proto, NTILE(3) říká, že výsledná sada musí mít a skupina tří záznamů . Po provedení příkazu se zobrazí následující výstup:
Tento článek vysvětlí všechny funkce RANK používané v SQL Server s různými příklady. Ukazuje také hlavní rozdíly mezi těmito funkcemi. Tyto funkce jsou velmi užitečné pro vývojáře, aby dobře prozkoumávali a spravovali svá data.