Функцията ROW_NUMBER() в MySQL се използва за връщане на пореден номер за всеки ред в неговия дял. Това е вид функция на прозореца. Номерът на реда започва от 1 до броя на редовете, налични в дяла.
Трябва да се отбележи, че MySQL не поддържа функцията ROW_NUMBER() преди версия 8.0, но те предоставят променлива на сесията което ни позволява да емулираме тази функция.
Синтаксис
По-долу е основният синтаксис за използване на ROW_NUMBER(). MySQL :
java int като низ
ROW_NUMBER() OVER ( )
Нека го демонстрираме с пример .
Първо, ще създадем таблица с име ' Лице ' използвайки израза по-долу:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
След това е необходимо да добавите стойности към тази таблица. Изпълнете следното изявление:
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);
След това изпълнете израза SELECT, за да покажете записите:
потребителско име
mysql> SELECT * FROM Person;
Ще получим резултата, както е показано по-долу:
Сега можем да използваме функцията ROW_NUMBER(), за да присвоим пореден номер за всеки запис, като използваме израза по-долу:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Той ще даде следния резултат:
двоично дърво в java
Отново можем да използваме функцията ROW_NUMBER(), за да присвоим пореден номер за всеки запис в дял, като използваме израза по-долу:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Той ще даде изхода, както е показано по-долу, където са намерени два дяла въз основа на годината (2015 и 2016).
javascript base64 декодиране
MySQL ROW_NUMBER() Използване на променлива на сесията
Можем да емулираме функцията ROW_NUMBER(), за да добавим номер на ред във възходящ ред, използвайки променливата на сесията.
Изпълнете оператора по-долу, който добавя номера на реда за всеки ред, който започва от 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
В това изявление първо сме посочили променливата на сесията @ред_номер посочено от @prfix и задаваме стойността му 0. След това сме избрали данните от таблицата Person и увеличаваме стойността за променлива @row_number с единица за всеки ред.
След успешното изпълнение на заявките ще получим резултата, както е показано по-долу:
Отново ще използваме променлива на сесията като таблица и ще я свържем кръстосано с таблицата източник, използвайки следния израз:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Ще получим резултата, както е показано по-долу: