Funkce čísla řádku je jednou z funkcí okna, která se používá pro přiřazení čísla řádku řádkům v každém z oddílů v pořadí, v jakém byly seřazeny v oddílu pomocí ROZDĚLIT klauzule, ROZDĚLENÍ pouze OBJEDNAT klauzuli lze použít uvnitř klauzule OVER, v takovém případě bude celá tabulka považována za jeden oddíl. Ale klauzule ORDER BY je povinná pro použití ROW_NUMBER() funkce, protože uspořádává řádky v oddílech v tomto logickém pořadí a později může funkce ROW_NUMBER() přiřadit číslo řádku. V každém oddílu začíná číslo řádku od 1.
Syntax:
ROW_NUMBER ( )
NAD ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC or DESC) AS column_name
Komponenty funkce ROW_NUMBER().
- ROZDĚLENÍ PODLE: Toto je hlavní podklauzule, která rozděluje řádky do oken a pro každý řádek hodnoty funkce okna budou vypočítány.
- SEŘADIT PODLE: To se používá k řazení řádků v oddílu, ve výchozím nastavení je to vzestupné pořadí. Bez klauzule ORDER BY funkce ROW_NUMBER() nefunguje.
- Typ návratu: Návratový typ funkce ROW_NUMBER() je BIGINT.
Použití funkce ROW_NUMBER().
Krok 1: Vytvořte databázi Geeksforgeeks pomocí následujícího SQL dotazu:
Dotaz
CREATE DATABASE Geeksforgeeks>
Použijte databázi GFG.
Dotaz
USE techcodeview.com>
Krok 3: Vytvořte tabulku se studenty různých sekcí s jejich celkovým počtem bodů z 500.
Dotaz
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
Krok 4: Vložte do tabulky řádky:
Dotaz
INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368), (5, 'Geek15','C',295), (6, 'Geek16','C',495);>
Krok 5: Zkontrolujte tabulku
SELECT * FROM studentsSectionWise>
Výstup:

studentiSectionWise tabulka
rok byl vynalezen počítač
Použití klauzule ORDER_BY s funkcí ROW_NUMBER().
Jednoduché použití klauzule ORDER BY se vzestupnou nebo sestupnou úrovní považuje celou tabulku pouze za jeden oddíl.
Zkontrolujeme rankNumber studentů pomocí funkce ROW_NUMBER() s klauzulí ORDER BY včetně všech sekcí:
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Vysvětlení: V dotazu jsme použili klauzuli ORDER BY se studentsMarks, která je řazena v DESC pořadí.
Výstup:

Výstup
Vysvětlení: Ve výsledku vidíme, že celá tabulka je považována za jeden oddíl a číslo rankNumber je ve vzestupném pořadí se studentsMarks v sestupném pořadí.
Použití PARTITION_BY s funkcí ROW_NUMBER().
Jednoduché použití klauzule PARTITION BY rozděluje tabulku do různých oddílů na základě názvu sloupce a poté klauzule ORDER BY se vzestupnou nebo sestupnou hodnotou považuje celou tabulku pouze za jeden oddíl. A pak ROW_NUMBER() funguje pro každé jedinečné číslo počínaje 1 v každém oddílu.
Zkontrolujme sekci hodnocení pomocí funkce ROW_NUMBER() s klauzulemi PARTITION BY a ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Vysvětlení: V dotazu, který jsme použili PARTICE BY klauzule k rozdělení tabulky na oddíl Name wise a klauzuli ORDER BY se značkami studentů, které jsou seřazeny v DESC.
Výstup:

Výstup
Vysvětlení: Ve výsledku můžeme vidět, že máme oddíly rozdělené podle názvu sekce a pak v každém oddílu jsou studenti seřazeni na základě známek studentů v pořadí DESC , funkce ROW_NUMBER() přiřadila číslo řádku počínaje v každém oddílu s tím, že se zvyšuje .
Vysvětlení ROW_NUMBER() bez PARTITION BY
Funkce ROW_NUMBER() SQL Serveru je flexibilní nástroj, který vám umožňuje poskytnout každému řádku v sadě výsledků jedinečné číslo řádku. Je stejně efektivní, když se používá bez klauzule PARTITION BY, i když se často používá ve spojení s ní pro seskupování a řazení v rámci oddílů. Možnosti a použití ROW_NUMBER() bez klauzule PARTITION BY budou popsány v tomto článku.
Syntax:
VYBRAT
ROW_NUMBER() PŘES ( SEŘADIT PODLE YourOrderByColumn) TAK JAKO RowNum,
Jiné sloupce
Z
YourTableName;
Zkontrolujme sekci hodnocení pomocí funkce ROW_NUMBER() bez klauzulí PARTITION BY a ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Výstup:

Výstup
Použití ROW_NUMBER() k získání podmnožiny řádků
Funkci ROW_NUMBER() lze použít k získání podmnožiny řádků z tabulky pomocí CTE, což může být užitečné v případě stránkování dat.
Podívejme se na 2 nejlepší žebříčky každé třídy pomocí CTE (Common Table Expression) s funkcí ROW_NUMBER() :
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
Vysvětlení: Zde v dotazu jsme použili výraz CTE k získání dočasné tabulky z dotazu použitého výše a vnější dotaz SELCT jsme použili k získání studentů, jejichž rankNumber je menší nebo rovno 2.
Výstup:

Výstup
Vysvětlení: Ve výsledku vidíme, že máme 2 nejlepší rankery z každé sekce, které jsou podmnožinou tabulky získané z dotazu zobrazeného v předchozím příkladu.
VýhodyROW_NUMBER()>
S ROZDĚLENÍM BY
- Umožňuje pokročilé hodnocení oddílů.
- Umožňuje jedinečné číslování řádků v rámci konkrétních skupin.
- Umožňuje větší flexibilitu za okolností vyžadujících rozsáhlou analýzu.
VýhodyROW_NUMBER()>
Bez PARTICE BY
- Přímočaré a jednoduché.
- usnadňuje řazení položek podle konkrétního sloupce.
- Může nabídnout lepší výkon, zejména pro menší sady výsledků.
Závěr
Je to velmi užitečné, když chceme mít sekvenování na základě rozdělení a provádět potřebné operace. Použitím doložka ORDER BY je povinné při používání funkce ROW_NUMBER(). Také pomocí CTE můžeme získat podmnožiny tabulky z objednaných oddílů. Hlavním případem použití ROW_NUMBER() je řazení řádků na základě různých oddílů, což je velmi užitečné pro účely analýzy dat.