MySQL Функция за прозорец с номер на ред

Mysql Row Number Window Function



В MySQL методът ROW NUMBER () съдържа хронологичен номер за всеки ред вътре в дяла. Това е просто някакъв вид прозорец. Фигурата на редовете започва от 1 с фигурата на редовете в дяла. Не забравяйте, че преди версия 8.0, MySQL не разрешава функцията ROW NUMBER (), но предлага променлива на сесията, която помага да се имитира тази функция. Ще разберем повече за функционалността на MySQL ROW NUMBER () в това ръководство и ще създадем пореден номер за всеки ред в колекцията от резултати. В MySQL методите ROW_NUMBER () се използват или с следващите клаузи:

  • В него ще се използва клаузата Over ().
  • Клаузата ORDERS BY подрежда резултата според реда на сортиране на споменатата колона.

Синтаксис:

>> SELECT col_name,ROW_NUMBER()НАД( ЧАСТ BY col_name, ПОДРЕДЕНИ ПО col_name) КАТО ред_ номер ОТ Таблица_име;

Нека отворим клиентската обвивка на командния ред MySQL от приложенията и въведем паролата за влизане.









Трябва да създадете нова таблица или да използвате таблицата по подразбиране, за да започнете работа по функцията номер на ред. Както е представено на изображението по -долу, имаме таблични животни в данните от схемата с някои записи в него. Нека да извлечем неговите записи, използвайки инструкцията SELECT.



>> SELECT * ОТ данни .животни;





Пример 01: ROW_NUMBER () Използване на ORDER BY клауза

Ще използваме същата таблица, за да разработим някои примери за функцията номер на ред. Взимаме пример за функцията ROW_NUMBER (), последвана от Over (), като използваме само клаузата ORDER BY. Извличаме всички записи, докато номерираме редовете според колоната Ценова поръчка. Дадохме името row_num на колона, която ще съхранява номерата на реда. Нека опитаме командата по -долу, за да го направим.

>> SELECT *,ROW_NUMBER()НАД( ПОДРЕДЕНИ ПО Цена) КАТО ред_ номер ОТ данни .животни;

При изпълнение на горната заявка можем да видим, че редовете са присвоени с номера според реда на сортиране на колоната Price. Може би си мислите, че някои по -малки цени трябва да са в горната част на колоната и трябва да се сортират според това. Но клаузата ORDER BY вижда само първата цифра или азбука на колоната за сортиране на стойности.



Нека изпълним същата заявка, последвана от клаузата ORDER BY, докато използваме реда за сортиране на колоната Age. Резултатът ще бъде даден според колоната Възраст.

>> SELECT *,ROW_NUMBER()НАД( ПОДРЕДЕНИ ПО Възраст) КАТО ред_ номер ОТ данни .животни;

Пример 02: ROW_NUMBER () Използване на клауза PARTITION BY

Ще използваме единствената клауза PARTITION BY в заявката ROW_NUMBER (), за да проверим резултатите. Използвахме заявката SELECT за извличане на записите, последвани от ROW_NUMBER () и OVER клауза, докато разделяме таблицата според колоната Color. Изпълнете приложената по -долу команда в командната обвивка.

>> SELECT *,ROW_NUMBER()НАД( ЧАСТ ПО Цвят) КАТО ред_ номер ОТ данни .животни;

В резултат можете да видите, че номерирането на редове е присвоено в дялове, според реда на сортиране на цветовете. Тъй като имаме 4 стойности за цвят Черен, който отнема 4 реда. Ето защо има четириредови числа, започващи от 1 до 4 и обратно.

Опитайте същия пример, разделен този път от колоната Пол. Както знаем, в тази таблица имаме само два пола, затова ще се образуват 2 дяла. Женските заемат 9 реда, затова има номерация на редове от 1 до 9. Докато мъжете имат 8 стойности, затова има от 1 до 8.

>> SELECT *,ROW_NUMBER()НАД( ЧАСТ ПО ПОЛ) КАТО ред_ номер ОТ данни .животни;

Пример 03: ROW_NUMBER () Използване на PARTITION BY & ORDER BY

Направихме горните два примера в командния ред на MySQL, сега е време да направим примера ROW_NUMBER () в MySQL Workbench 8.0. Така че, отворете MySQL Workbench 8.0 от приложенията. Свържете MySQL Workbench с локалната коренна база данни на хоста, за да започнете работа.

От лявата страна на MySQL Workbench ще намерите лентата Schema, издухайте навигатора. В тази лента на схемата ще намерите списъка с бази данни. Под списъка с бази данни ще имате различни таблици и съхранени процедури, както можете да видите на изображението по -долу. В нашата база данни „данни“ имаме различни таблици. Ще отворим таблицата ‘order1’ с помощта на командата SELECT в областта на заявката, за да започнем да я използваме за изпълнение на функцията ROW_NUMBER ().

>> SELECT * ОТ данни .подредба1;

Поръчката на таблицата1 е показана в изгледа на мрежата, както е показано по -долу. Можете да видите, че има 4 полета за колони, id, Region, Status и OrderNo. Ще извличаме всички записи на тази таблица, докато използваме клаузите ORDER BY и PARTITION BY, и двете едновременно.

В областта на заявките на MySQL Workbench 8.0 въведете показаната по-долу заявка. Заявката е стартирана с клаузата SELECT, като се извличат всички записи, последвани от функцията ROW_NUMBER () заедно с клаузата OVER. След клаузата OVER, ние сме посочили колоната Status, продължена от оператора PARTITION BY, за да разделим таблицата на дялове според тази таблица. Клаузата ORDER BY се използва за подреждане на таблицата по низходящ начин според колоната Region. Номерата на редовете ще се съхраняват в колоната row_num. Докоснете иконата на флаш, за да изпълните тази команда.

Показаният по-долу резултат ще бъде показан. На първо място, таблицата е разделена на две части според стойностите на колоната Status. След това той е представен в низходящ ред на колона „Регион“ и дяловете са присвоени с номерата на редовете.

Заключение:

И накрая, завършихме всички необходими примери за използване на функцията ROW_NUMBER () в MySQL Workbench и MySQL Command-Line Client Shell.