Поиск по сайту:
Суть человека постигает тот, кто сущность пса сперва в себе убьет (Саади).

ROW_NUMBER, вот как вы его эмулируете в MySQL

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
16.01.2020
Как скопировать базу данных MySQL

Описание : в этой статье вы узнаете, как эмулировать функцию row_number() в MySQL. Мы покажем вам, как добавить последовательное целое число к каждой строке или группе строк в наборе результатов.

Обратите внимание, что MySQL поддерживает оконную функцию row_number() начиная с версии 8.0. Если вы используете MySQL 8.0 или более позднюю версию, проверьте функцию ROW_NUMBER(). В противном случае вы можете продолжить обучение, чтобы узнать, как эмулировать функцию ROW_NUMBER().

 

Введение в функцию ROW_NUMBER()

ROW_NUMBER() является функцией окна, которая возвращает порядковый номер для каждой строки, начиная с 1 для первой строки.

До версии 8.0 MySQL не поддерживал такую ROW_NUMBER(), как Microsoft SQL Server, Oracle или PostgreSQL. К счастью, MySQL предоставляет переменные сеанса, которые вы можете использовать для эмуляции функции ROW_NUMBER().

 

MySQL ROW_NUMBER – добавление номера строки для каждой строки

Чтобы эмулировать функцию ROW_NUMBER(), вы должны использовать переменные сеанса в запросе.

Следующие операторы возвращают пять сотрудников из  employeesтаблицы и добавляют номер строки для каждой строки, начиная с 1.

SET@row_number=0;
SELECT
(@row_number:=@row_number + 1) AS num,
firstName,
lastName
FROM
employees
ORDER BY firstName, lastName
LIMIT 5;

 

В этом примере:

  • Сначала определите именованную переменную @row_number и установите ее значение равным 0. Переменная сеанса @row_number, указанная с префиксом @.
  • Затем выберите данные из таблицы employees и увеличьте значение переменной @row_number на единицу для каждой строки. Мы используем предложение LIMIT, чтобы ограничить количество возвращаемых строк до пяти.
Читать  Как установить LAMP (Linux, Apache, MySQL & PHP) и PhpMyAdmin на Debian 8

Другой метод заключается в использовании переменной сеанса в качестве производной таблицы и перекрестном соединении ее с основной таблицей. Смотрите следующий запрос:

SELECT
(@row_number:=@row_number + 1) AS num,
firstName,
lastName
FROM
employees,
(SELECT @row_number:=0) AS t
ORDER BY
firstName,
lastName
LIMIT 5;

 

Обратите внимание, что производная таблица должна иметь свой собственный псевдоним, чтобы сделать запрос синтаксически правильным.

 

MySQL ROW_NUMBER- добавление номера строки в каждую группу

Как насчет функциональности ROW_NUMBER() OVER(PARITION BY … )? Например, что делать, если вы хотите добавить номер строки в каждую группу, и он сбрасывается для каждой новой группы.

Давайте посмотрим на таблицу payments из примера базы данных :

ROW_NUMBER, вот как вы его эмулируете в MySQL

 

SELECT
customerNumber,
paymentDate,
amount
FROM
payments
ORDER BY
customerNumber;

 

 

ROW_NUMBER, вот как вы его эмулируете в MySQL

 

Предположим, для каждого клиента вы хотите добавить номер строки, и номер строки сбрасывается при каждом изменении номера клиента.

Чтобы достичь этого, вы должны использовать две переменные сеанса, одну для номера строки, а другую для хранения старого номера клиента, чтобы сравнить ее с текущей в качестве следующего запроса:

set @row_number := 0;

SELECT
@row_number:=CASE
WHEN@customer_no=customerNumber
THEN @row_number + 1
ELSE 1
END AS num,
@customer_no:=customerNumber customerNumber,
paymentDate,
amount
FROM
payments
ORDER BY customerNumber;

 

 

ROW_NUMBER, вот как вы его эмулируете в MySQL

 

В этом примере мы используем выражение CASE в запросе. Если номер клиента остается неизменным, мы увеличиваем переменную @row_number, в противном случае мы сбрасываем ее до единицы.

Этот запрос использует производную таблицу и перекрестное соединение для получения одинакового результата.

SELECT
@row_number:=CASE
WHEN@customer_no=customerNumber
THEN
@row_number + 1
ELSE
1
END AS num,
@customer_no:=customerNumber CustomerNumber,
paymentDate,
amount
FROM
payments,
(SELECT @customer_no:=0,@row_number:=0) as t
ORDER BY
customerNumber;

Читать  Что такое RANGE Partitioning в MySQL

 

В этой статье вы узнали два способа эмулировать оконную функцию row_number в MySQL.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Рекомендуемое
Java является одним из самых популярных языков программирования, используемых для…

Спасибо!

Теперь редакторы в курсе.