- Клаузата Over () ще бъде използвана в нея.
- Клаузата ORDERS BY подрежда резултата според реда за сортиране на споменатата колона.
Синтаксис:
>> ИЗБЕРЕТЕ col_name, ROW_NUMBER () НАД (ДЯЛ ПО col_name, ПОРЪЧКА ПО col_name) КАТО номер_ред от ИМЕ на таблица;Нека отворим клиентската обвивка на командния ред на MySQL от приложенията и въведем паролата за влизане.
Трябва да създадете нова таблица или да използвате таблицата по подразбиране, за да започнете да работите по функцията номер на ред. Както е представено на изображението по-долу, имаме таблица „животни“ в схемата „данни“ с някои записи в нея. Нека извлечем неговите записи, като използваме инструкцията SELECT.
>> ИЗБЕРЕТЕ * ОТ данни.животни;
Пример 01: ROW_NUMBER () Използване на клауза ORDER BY
Ще използваме същата таблица, за да разгледаме някои примери за функцията за номер на редове. Вземаме пример за функцията ROW_NUMBER (), последвана от Over (), като същевременно използваме само клаузата ORDER BY. Извличахме всички записи, докато номерирахме редовете според реда на колоната „Цена“. Дадохме името „row_num“ на колона, която ще съхранява номерата на реда. Нека опитаме командата по-долу, за да го направим.
>> ИЗБЕРЕТЕ *, РЯД_NUMBER () НАД (ПОРЪЧКА ПО ЦЕНА) КАТО row_num ОТ данни.животни;При изпълнението на горната заявка можем да видим, че на редовете са присвоени номера според реда за сортиране на колоната „Цена“. Може би си мислите, че някои по-малки цени трябва да са в горната част на колоната и тя трябва да се сортира според това. Но клаузата ORDER BY вижда само първата цифра или азбука на колоната за сортиране на стойности.
Нека изпълним същата заявка, последвана от клаузата ORDER BY, докато използваме реда за сортиране на колоната „Възраст“. Резултатът ще бъде даден съгласно колона „Възраст“.
>> ИЗБЕРЕТЕ *, РЯД_NUMBER () НАД (ПОРЪЧКА ПО ВЪЗРАСТ) КАТО номер_ред от данни.животни;
Пример 02: ROW_NUMBER () Използване на клауза PARTITION BY
Ще използваме единствената клауза PARTITION BY в заявката ROW_NUMBER (), за да проверим резултатите. Използвахме заявката SELECT, за да извлечем записите, последвани от ROW_NUMBER () и клаузата OVER, докато разделяме таблицата според колоната „Цвят“. Изпълнете приложената по-долу команда в командната обвивка.
>> SELECT *, ROW_NUMBER () НАД (ДЯЛ ПО ЦВЕТ) КАТО номер_ред от данни.животни;В резултата можете да видите, че номерирането на редове е присвоено в дялове, според реда за сортиране на цветовете. Тъй като имаме 4 стойности за цвят „Черен“, който отнема 4 реда. Ето защо има четири реда номера, започващи от 1 до 4 и обратно.
Опитайте същия пример, този път разделен от колоната „Пол“. Както знаем, в тази таблица имаме само два пола, затова ще бъдат оформени 2 дяла. Женските заемат 9 реда, затова има номерация на редове от 1 до 9. Докато мъжете имат 8 стойности, затова има от 1 до 8.
>> ИЗБЕРЕТЕ *, ROW_NUMBER () НАД (РАЗДЕЛЕНИЕ ПО ПОЛ) КАТО row_num ОТ данни.животни;
Пример 03: ROW_NUMBER () Използване на PARTITION BY & ORDER BY
Направихме горните два примера в командния ред на MySQL, сега е време да направим примера ROW_NUMBER () в MySQL Workbench 8.0. И така, отворете MySQL Workbench 8.0 от приложенията. Свържете MySQL Workbench с локалната база данни на хоста, за да започнете да работите.
От лявата страна на MySQL Workbench ще намерите лентата на схемата, взривете навигатора. В тази лента на схемата ще намерите списъка с бази данни. Под списъка с бази данни ще имате различни таблици и съхранени процедури, както можете да видите на изображението по-долу. Имаме различни таблици в нашата база данни „данни“. Ще отворим таблицата 'order1' с помощта на командата SELECT в областта на заявката, за да започнем да я използваме за изпълнение на функцията ROW_NUMBER ().
>> ИЗБЕРЕТЕ * ОТ данни.поръчка1;
Таблицата „order1“ е показана в изглед на мрежа, както е показано по-долу. Можете да видите, че има 4 полета за колона, id, Region, Status и OrderNo. Ще извлечем всички записи от тази таблица, докато използваме клаузата ORDER BY и PARTITION BY, и двете едновременно.
В областта на заявките на MySQL Workbench 8.0, въведете показаната по-долу заявка. Заявката е стартирана с клаузата SELECT, извличане на всички записи, последвани от функцията ROW_NUMBER (), заедно с клаузата OVER. След клаузата OVER, ние посочихме колоната „Състояние“, последвана от израза „PARTITION BY“, за да разделим таблицата на дялове според тази таблица. Клаузата ORDER BY се използва за подреждане на таблицата по низходящ начин съгласно колона „Регион“. Номерата на редовете ще се съхраняват в колоната „row_num“. Докоснете иконата на флаш, за да изпълните тази команда.
Ще се покаже показаният по-долу резултат. На първо място, таблицата е разделена на две части според стойностите на колона „Състояние“. След това той е представен в низходящ ред на колона „Регион“ и дяловете са присвоени с номерата на редовете.
Заключение:
И накрая, завършихме всички необходими примери за използване на функцията ROW_NUMBER () в MySQL Workbench и клиентската обвивка на MySQL от командния ред.