- Методите винаги функционират с клауза Over ().
- В хронологичен ред те разпределят всеки ред по ранг.
- В зависимост от ORDER BY, функциите разпределят ранг на всеки ред.
- Изглежда, че редовете винаги имат присвоен ранг, започвайки с по един за всеки нов дял.
Общо има три вида функции за класиране, както следва:
- Ранг
- Плътен ранг
- Процент ранг
MySQL RANK ():
Това е метод, който дава ранг вътре в дял или масив от резултати с пропуски на ред. Хронологично, класирането на редовете не се разпределя през цялото време (т.е.д., увеличен с един от предишния ред). Дори когато имате равенство между няколко от стойностите, в този момент помощната програма rank () прилага същото класиране към него. Също така, предишният му ранг плюс цифра от повтарящи се числа може да бъде последващият номер на ранга.
За да разберете класирането, отворете обвивката на клиента на командния ред и въведете паролата си за MySQL, за да започнете да я използвате.
Да приемем, че имаме таблица по-долу, наречена „същото“ в базата данни „данни“, с някои записи.
>> ИЗБЕРЕТЕ * ОТ данни.същото;
Пример 01: Прост RANK ()
По-долу използвахме функцията Rank в рамките на командата SELECT. Тази заявка избира колоната „id“ от таблицата „същото“, докато я класира според колоната „id“. Както можете да видите, ние дадохме име на колоната за класиране, което е „my_rank“. Класирането вече ще се съхранява в тази колона, както е показано по-долу.
>> ИЗБЕРЕТЕ id, RANK () OVER (ORDER BY id) my_rank ОТ fata.същото;
Пример 02: RANK () Използване на PARTITION
Да приемем друга таблица „служител“ в база данни „данни“ със следните записи. Нека имаме още един екземпляр, който разделя набора от резултати на сегменти.
>> ИЗБЕРЕТЕ * ОТ данни.служител;
За да се използва методът RANK (), следващата инструкция присвоява ранга на всеки ред и разделя набора от резултати на дялове, използвайки „Възраст“ и ги сортира в зависимост от „Заплата“. Тази заявка извлича всички записи, докато се класира в колона “new_rank”. Можете да видите резултатите от тази заявка по-долу. Той е сортирал таблицата според „Заплата“ и я е разделил според „Възраст“.
>> ИЗБЕРЕТЕ *, РАНГИРАЙТЕ () НАД (РАЗПРЕДЕЛЕНИЕ ПО ВЪЗРАСТ ПОРЪЧКА ПО Заплата) new_rank ОТ данните.служител;
MySQL DENSE_Rank ():
Това е функционалност, където, без никакви дупки, определя ранг на всеки ред в дивизия или набор от резултати. Класирането на редовете най-често се разпределя в последователен ред. Понякога имате обвързване между стойностите и следователно то се присвоява на точния ранг от плътния ранг, а последващият му ранг е следващото следващо число.
Пример 01: Обикновено DENSE_RANK ()
Да предположим, че имаме таблица „служител“ и трябва да подредите колоните на таблицата „Име“ и „Заплата“ според колона „Име“. Създадохме нова колона “dens_Rank”, за да съхраним рейтинга на записите в нея. При изпълнение на заявката по-долу имаме следните резултати с различно класиране спрямо всички стойности.
>> ИЗБЕРЕТЕ Име, Заплата, DENSE_RANK () НАД (ПОРЪЧКА ПО Име) den_rank ОТ данни.служител;
Пример 02: DENSE_RANK () Използване на PARTITION
Нека видим друг екземпляр, който разделя резултата, зададен на сегменти. Съгласно синтаксиса по-долу, полученият набор, разделен от фразата PARTITION BY, се връща от израза FROM и методът DENSE_RANK () след това се размазва към всяка секция, като се използва колоната „Име“. След това за всеки сегмент фразата ORDER BY размазва, за да се определи императивът на редовете, като се използва колоната „Възраст“.
>> ИЗБЕРЕТЕ Име, Възраст, Заплата, DENSE_RANK () НАД (ДЯЛ ПО ИМЕ ПОРЪЧКА ПО Възраст) new_rank ОТ данни.служител;При изпълнението на горната заявка можете да видите, че имаме много различен резултат в сравнение с метода Single thick_rank () в горния пример. Имаме една и съща повтаряща се стойност за всяка стойност на реда, както можете да видите по-долу. Това е връзката на стойностите на ранга.
MySQL PERCENT_RANK ():
Това наистина е метод за класиране в проценти (сравнителен ранг), който изчислява за редове вътре в дял или колекция от резултати. Този метод връща списък от скала на стойност от нула до 1.
Пример 01: Обикновен PERCENT_RANK ()
Използвайки таблицата „служител“, разгледахме примера на простия метод PERCENT_RANK (). Имаме зададена по-долу заявка за това. Колоната per_rank е генерирана от метода PERCENT_Rank () за класиране на резултата, зададен в процентната форма. Извличаме данните според реда на сортиране в колона „Възраст“ и след това класираме стойностите от тази таблица. Резултатът от заявката за този пример ни даде процентно класиране за стойностите, както е представено на изображението по-долу.
>> ИЗБЕРЕТЕ *, PERCENT_RANK () НАД (ПОРЪЧКА ПО Възраст) per_rank ОТ данни.служител;
Пример 02: PERCENT_RANK () Използване на PARTITION
След като направихме простия пример за PERCENT_RANK (), сега е ред за клаузата „PARTITION BY“. Използваме същата таблица „служител“. Нека да разгледаме още един екземпляр, който разделя набора от резултати на раздели. Даден от синтаксиса по-долу, получената стена на разстояние от израза PARTITION BY се реимбурсира от декларацията FROM, както и методът PERCENT_RANK () след това се използва за класиране на всеки ред от колоната „Име“. На изображението, показано по-долу, можете да видите, че наборът от резултати съдържа само 0 и 1 стойности.
>> ИЗБЕРЕТЕ *, PERCENT_RANK () НАД (ДЕЛЕНЕ ПО ПОРЪЧКА НА ЗАЛАТА ПО ИМЕ) per_rank ОТ данни.служител;
Заключение:
И накрая, направихме и трите функции за класиране на редове, използвани в MySQL, чрез клиентската обвивка на командния ред на MySQL. Също така, ние взехме предвид както простата, така и клаузата PARTITION BY в нашето проучване.