logo

Funkce MySQL ROW_NUMBER().

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:

Funkce MySQL ROW_NUMBER().

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:

Funkce MySQL ROW_NUMBER().

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
Funkce MySQL ROW_NUMBER().

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:

Funkce MySQL ROW_NUMBER().

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:

Funkce MySQL ROW_NUMBER().