SQLShack (Čeština)

provádíme výpočty na data pomocí různých souhrnné funkce, jako je Max, Min a AVG. Pomocí těchto funkcí získáme jeden výstupní řádek. SQL Sever poskytuje funkce SQL RANK pro určení hodnosti pro jednotlivá pole podle kategorií. Vrací agregovanou hodnotu pro každý zúčastněný řádek. Funkce SQL RANK také zná jako funkce okna.

  • poznámka: termín Windows v tomto se netýká operačního systému Microsoft Windows., Jedná se o funkce SQL RANK.

máme následující funkce hodnosti.

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

V SQL RANK funkce, používáme VÍCE než() klauzule definovat sadu řádků v sadě výsledků. Můžeme také použít oddíl SQL podle klauzule k definování podmnožiny dat v oddílu. Můžete také použít pořadí podle klauzule třídit výsledky v sestupném nebo vzestupném pořadí.

než prozkoumáme tyto funkce SQL RANK, připravíme ukázková data., V těchto ukázkových datech máme výsledky zkoušek pro tři studenty z matematiky, vědy a angličtiny.

v tabulce ExamResult máme následující vzorová data.

použijeme každou funkci SQL Rank v nadcházejících příkladech.

ROW_Number() SQL funkce RANK

použijeme ROW_Number() SQL funkce RANK získat unikátní sekvenční číslo pro každý řádek v zadané údaje. To dává pořadí jeden pro první řádek a pak zvyšuje hodnotu o jeden pro každý řádek. Dostáváme různé pozice pro řádek, který má podobné hodnoty, jakož.,

proveďte následující dotaz, abyste získali hodnost pro studenty podle jejich značek.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., Na výše uvedeném snímku obrazovky získáme řádek číslo 1 pro značky 50.

můžeme určit sestupné pořadí podle klauzule a odpovídajícím způsobem změní hodnost.,ae“>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., Máme studentské výsledky pro tři předměty. Chceme Hodnotit výsledek studentů podle jejich známek v předmětech. Například na následujícím snímku získala Studentka Isabella nejvyšší známky v anglickém předmětu a nejnižší známky v matematickém předmětu. Podle značek, Isabella dostane první místo v angličtině a 3. místo v matematice předmětu.

proveďte následující dotaz, abyste získali tento výsledek.,v id=“c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., V tomto dotazu jsme nezadali oddíl SQL podle klauzule, abychom data rozdělili na menší podmnožinu. Používáme funkci SQL Rank s více než klauzulí na klauzuli Marks (v sestupném pořadí), abychom získali pozice pro příslušné řádky.,div id=“7d9d5b54ae“>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., Například nejvyšší a nejnižší známky v kompletní sadě výsledků jsou 90 a 50. Ve výsledkové sadě získá nejvyšší známka hodnost 1 a nejnižší známka získá hodnost 9.

Pokud dva studenti získají stejné značky (v našem příkladu čísla řádků 4 a 5), jejich pozice jsou také stejné.

DENSE_RANK() SQL funkce RANK

použijeme DENSE_RANK() funkce určete jedinečné pořadí číslo v rámci oddílu, jako na zadaný sloupec hodnota. Je to podobné funkci hodnosti s malým rozdílem.,

ve funkci SQL RANK DENSE_RANK (), pokud máme duplicitní hodnoty, SQL přiřazuje k těmto řádkům také různé pozice. V ideálním případě bychom měli získat stejnou hodnost pro duplicitní nebo podobné hodnoty.

provedeme následující dotaz pomocí funkce DENSE_RANK ().,

1
2
3
4
5
6

VYBERTE Studentname,
Téma
Značky
DENSE_RANK() OVER(ORDER BY Marek DESC) Hodnost
OD ExamResult
POŘADÍ PODLE Hodnosti;

Ve výstupu, můžete vidět, že máme stejné hodnoty pro oba Lily a Isabelle, který nastřílel 70 bodů.,

použijeme funkci DENSE_RANK v kombinaci s oddílem SQL podle klauzule.,v id=“2d0aafc924″>

1
2
3
4
5
6
7

VYBERTE Studentname,
Téma
Značky,
DENSE_RANK() OVER(PARTITION PODLE Předmětu ZÁJMU O Značky DESC) Hodnost
OD ExamResult
OBJEDNÁVKY Studentname,
Rank;

nechceme mít dva studenti s podobnými značkami; proto výsledek nastavit podobné Funkce RANK v tomto případě.,

aktualizujeme značku studenta následujícím dotazem a znovu spustíme dotaz.

1
Aktualizace Examresult nastavit Známky=70, kde Studentname=’Isabella‘ a Subject= „Matematika“

můžeme vidět, že ve skupině studentů, Isabella, mám podobné známky v Matematice a Přírodovědných předmětech., Hodnost je v tomto případě stejná pro oba subjekty.

Pojďme se podívat na rozdíl mezi RANK() a DENSE_RANK() SQL funkce Rank se následující dotaz.,b829″>

1
2
3
4
5
6
7

VYBERTE Studentname,
Téma
Značky
DENSE_RANK() OVER(PARTITION BY StudentName POŘADÍ PODLE Známek ) Hodnost
OD ExamResult
OBJEDNÁVKY Studentname,
Rank;

Ve výstupu, můžete vidět rozdíl v hodnosti funkce výstup v rámci oddílů., Nemáme žádnou mezeru ve funkci DENSE_RANK.

na následujícím snímku obrazovky můžete vidět, že Isabella má podobná čísla ve dvou předmětech. Funkce rank přiřadí rank 1 pro podobné hodnoty nicméně, interně ignoruje rank two, a další řádek dostane rank three.

ve funkci Dense_Rank udržuje hodnost a nedává žádnou mezeru pro hodnoty.

ntile(N) SQL RANK function

používáme funkci NTILE(N) k distribuci počtu řádků v zadaném (N) počtu skupin., Každá skupina řádků získá svou hodnost podle zadané podmínky. Musíme zadat hodnotu požadovaného počtu skupin.

v mém příkladu máme devět záznamů v tabulce ExamResult. NTILE(2) ukazuje, že ve výsledku požadujeme skupinu dvou záznamů.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

podobně ntile (3) rozděluje počet řádků tří skupin, které mají v každé skupině tři záznamy.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., V následujícím dotazu je každý oddíl na předmětech rozdělen do dvou skupin.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., Předpokládejme, že chceme získat data studentů z řad 1 až 3. V následujícím dotazu používáme běžné výrazy tabulky (CTE) k získání dat pomocí funkce ROW_NUMBER () a později filtrujeme výsledek z CTE, abychom uspokojili náš stav.,d>

S StudentRanks JAKO
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Marky) JAKO Řadách
OD ExamResult
)
VYBERTE StudentName , Marek
OD StudentRanks
, KDE Řadách >= 1 a Řady <=3
OBJEDNÁVKY Řad

můžeme použít OFFSET FETCH příkaz počínaje SQL Server 2012, aby přinesla určitý počet záznamů.,v id=“0fa57edc44″>

S StudentRanks JAKO
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Marky) JAKO Řadách
OD ExamResult
)
VYBERTE StudentName , Marek
OD StudentRanks
OBJEDNÁVKY Řad VYROVNÁNÍ 1 ŘÁDKŮ FETCH DALŠÍ 3 ŘÁDKY;

rychlý přehled o SQL RANK Funkce

ROW_Number

přiřadí pořadové číslo pořadí, aby každý jedinečný záznam.,

RANK

přiřazuje číslo hodnosti každému řádku v oddílu. Přeskočí číslo pro podobné hodnoty.

Dense_RANK

přiřazuje číslo hodnosti každému řádku v oddílu. Nevynechává číslo pro podobné hodnoty.

NTILE (N)

rozděluje počet řádků podle zadaného oddílu a přiřazuje jedinečnou hodnotu v oddílu.,

Závěr

V tomto článku jsme se zabývali SQL RANK funkce a rozdíl mezi těmito funkcemi. Je užitečné, aby vývojáři sql byli obeznámeni s těmito funkcemi, aby dobře prozkoumali a spravovali svá data. Pokud máte nějaké připomínky nebo dotazy, neváhejte je nechat v komentářích níže.,

  • Autora
  • Poslední Příspěvky
Jako MCSA certifikované a Microsoft Certified Trainer v Gurgaon, Indie, s 13 let zkušeností, Rajendra pracuje pro řadu velkých společností se zaměřením na optimalizaci výkonu, monitorování, vysoké dostupnosti a disaster recovery strategie a provádění., Je autorem stovek autoritativních článků o SQL Serveru, Azure, MySQL, Linuxu, Power BI, Performance tuning, AWS/Amazon RDS, Git a souvisejících technologiích, které dosud vidělo více než 10M čtenářů.
je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma, s jeho 50dílnou sérií na serveru SQL vždy na skupinách dostupnosti. Na základě svého příspěvku do komunity SQL Server byl v letech 2020 a 2021 na sqlshacku nepřetržitě oceněn různými oceněními včetně prestižního „nejlepšího autora roku“.,
Raj je vždy zájem o nové výzvy, takže pokud budete potřebovat poradenství na jakékoliv téma, na něž v jeho spisech, on může být dosaženo na rajendra.gupta16@gmail.,com
Zobrazit všechny příspěvky od Rajendra Gupta

Nejnovější příspěvky Rajendra Gupta (zobrazit všechny)
  • Vykonávající vedlejší a hlavní verze aktualizace pro AWS RDS SQL Server – 29. ledna, 2021
  • Nasazení AWS RDS instance PostgreSQL – 27. ledna 2021
  • Migrace v prostorách SQL databází AWS RDS serveru SQL Server pomocí AWS DMS – 25. ledna 2021

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *