Shrnutí: v tomto výukovém programu se naučíte, jak pomocí ROW_NUMBER()
přiřadit každému řádku pořadové číslo v sadě výsledků dotazu.
Přehled funkcí SQL ROW_NUMBER ()
ROW_NUMBER()
je funkce okna, která přiřadí pořadové celé číslo každý řádek v sadě výsledků dotazu.
Následující text ilustruje syntaxi funkce ROW_NUMBER()
:
V této syntaxi
- Nejprve klauzule
PARTITION BY
rozdělí sadu výsledků vrácenou zFROM
klauzule do oddílů. KlauzulePARTITION BY
je volitelná. Pokud to vynecháte, celá sada výsledků bude považována za jeden oddíl. - Potom klauzule
ORDER BY
seřadí řádky v každém oddílu. ProtožeROW_NUMBER()
je funkce citlivá na pořadí, je vyžadována klauzuleORDER BY
. - Nakonec každý řádek v každém oddílu je přiřazeno pořadové celé číslo, které se říká číslo řádku. Číslo řádku se resetuje při každém překročení hranice oddílu.
Příklady SQL ROW_NUMBER ()
Použijeme employees
a departments
tabulky z ukázkové databáze pro demonstraci:
A) Jednoduchý příklad SQL ROW_NUMBER ()
Následující příkaz vyhledá křestní jméno, příjmení a plat všech zaměstnanců. Kromě toho používá funkci ROW_NUMBER()
k přidání postupného celého čísla do každého řádku.
Následující obrázek zobrazuje dílčí sadu výsledků:
B ) Použití SQL ROW_NUMBER () pro stránkování
Pro stránkování lze použít funkci ROW_NUMBER()
. Chcete-li například zobrazit všechny zaměstnance v tabulce v aplikaci podle stránek, které každá stránka obsahuje deset záznamů.
- Nejprve použijte
ROW_NUMBER()
přiřadí každému řádku pořadové celé číslo. - Zadruhé, filtruje řádky podle požadované stránky. Například první stránka má řádky začínající od 1 do 9 a druhá stránka má řádky začínající od 11 do 20 atd.
Následující příkaz vrací záznamy o druhá stránka, každá stránka má deset záznamů.
Následující ukazuje výstup:
Pokud chcete místo poddotazu použít běžný tabulkový výraz (CTE), je zde dotaz:
C) Použití SQL ROW_NUMBER () pro nalezení n-té nejvyšší hodnoty na skupinu
Následující příklad ukazuje, jak najít zaměstnance, kteří mají ve svých odděleních nejvyšší plat:
V poddotazu:
- Nejprve klauzule
PARTITION BY
rozděluje zaměstnance podle oddělení. - Zadruhé,
ORDER BY
klauzule seřadí zaměstnance v každém oddělení podle platu v sestupném pořadí. - Zatřetí,
ROW_NUMBER()
každému řádku přiřadí pořadové celé číslo . Při změně oddělení resetuje číslo.
Následující ukazuje sadu výsledků poddotazu:
Ve vnějším dotazu jsme vybrali pouze řádky zaměstnanců, které mají row_num
s hodnota 1.
Zde je výstup celého dotazu:
Pokud změníte predikát v klauzuli WHERE
z 1 na 2, 3 atd., získáte zaměstnance, kteří mít druhý nejvyšší plat, třetí nejvyšší plat atd.
V tomto kurzu jste se naučili používat funkci SQL ROW_NUMBER()
k přiřazení sekvenčního celé číslo do každého řádku ve výsledkové sadě dotazu.
- Byl tento výukový program užitečný?
- AnoNe