Funkce ROW_NUMBER() v MySQL se používá k vrácení pořadové číslo pro každý řádek v jeho oddílu. Je to druh funkce okna. Číslo řádku začíná od 1 do počtu řádků přítomných v oddílu.
Je třeba poznamenat, že MySQL nepodporuje funkci ROW_NUMBER() před verzí 8.0, ale poskytuje proměnná relace což nám umožňuje emulovat tuto funkci.
Syntax
Níže jsou uvedeny základní syntaxe pro použití ROW_NUMBER() v MySQL :
dobový klíč
ROW_NUMBER() OVER ( )
Ukažme si to na příkladu .
Nejprve vytvoříme tabulku s názvem ' Osoba “ pomocí níže uvedeného prohlášení:
pro smyčkový bash
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Dále je nutné do této tabulky přidat hodnoty. Proveďte níže uvedený příkaz:
INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016);
Dále spusťte příkaz SELECT pro zobrazení záznamů:
mysql> SELECT * FROM Person;
Získáme výstup, jak je znázorněno níže:
Nyní můžeme pomocí funkce ROW_NUMBER() přiřadit pořadové číslo každému záznamu pomocí níže uvedeného příkazu:
třetí normální forma
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Poskytne následující výstup:
Opět můžeme použít funkci ROW_NUMBER() k přiřazení pořadového čísla každému záznamu v rámci oddílu pomocí níže uvedeného příkazu:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Poskytne výstup, jak je uvedeno níže, kde byly nalezeny dva oddíly na základě roku (2015 a 2016).
pole c řetězec
MySQL ROW_NUMBER() Pomocí proměnné relace
Můžeme emulovat funkci ROW_NUMBER() a přidat číslo řádku v rostoucím pořadí pomocí proměnné session.
Proveďte níže uvedený příkaz, který přidá číslo řádku pro každý řádek, který začíná od 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
V tomto příkazu jsme nejprve specifikovali proměnnou session @číslo_řádku označený @prfix a jeho hodnotu nastavíme na 0. Poté vybereme data z tabulky Osoba a zvýšíme hodnotu proměnné @číslo_řádku o jednu na každý řádek.
Po úspěšném provedení dotazů získáme výstup, jak je uvedeno níže:
Opět použijeme proměnnou relace jako tabulku a propojíme ji se zdrojovou tabulkou pomocí následujícího příkazu:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Získáme výstup, jak je uvedeno níže: