Функција РОВ_НУМБЕР() у МиСКЛ-у се користи за враћање редни број за сваки ред унутар његове партиције. То је нека врста функције прозора. Број реда почиње од 1 до броја редова присутних у партицији.
Треба напоменути да МиСКЛ не подржава функцију РОВ_НУМБЕР() пре верзије 8.0, али они пружају променљива сесије што нам омогућава да емулирамо ову функцију.
Синтакса
Следе основна синтакса за коришћење РОВ_НУМБЕР() у МиСКЛ :
кампп алтернатива
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);
Затим извршите наредбу СЕЛЕЦТ да бисте приказали записе:
стрсеп ц
mysql> SELECT * FROM Person;
Добићемо излаз, као што је приказано у наставку:
покушајте да ухватите Јава
Сада можемо да користимо функцију РОВ_НУМБЕР() да доделимо редни број сваком запису помоћу следеће изјаве:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
То ће дати следећи излаз:
Опет, можемо користити функцију РОВ_НУМБЕР() да доделимо редни број за сваки запис унутар партиције користећи наредбу у наставку:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
То ће дати излаз као у наставку где су пронађене две партиције на основу године (2015. и 2016.).
лист јава
МиСКЛ РОВ_НУМБЕР() Коришћење променљиве сесије
Можемо емулирати функцију РОВ_НУМБЕР() да бисмо додали број реда у растућем редоследу користећи променљиву сесије.
Извршите наредбу у наставку која додаје број реда за сваки ред, који почиње од 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
У овој изјави, прво смо навели променљиву сесије @ред_број означено са @прфик и поставили његову вредност 0. Затим смо одабрали податке из табеле Особа и повећали вредност за променљиву @ров_нумбер за један у сваком реду.
Након успешног извршавања упита, добићемо резултат као у наставку:
Опет, користићемо променљиву сесије као табелу и укрштати је са изворном табелом користећи следећу изјаву:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Добићемо излаз на следећи начин: