Понякога може да се наложи да получите номер на ред в MySQL за отчитане и анализ. Номерът на реда е много полезен при класиране и сортиране на данни. Също така е полезно при филтриране на данни въз основа на стойност на номера на ред. В тази статия ще разгледаме как да получите номер_ред в MySQL.
Как да получите row_number в MySQL
Функцията Row_number() е налична извън кутията от MySQL 8.0.
Ето синтаксиса на номер_ред() синтаксис. Моля, имайте предвид, че клаузата PARTITION BY не е задължителна.
ROW_NUMBER() OVER ( PARTITION BY <expression(s)> ORDER BY <expression(s)> [ASC|DESC])
Да кажем, че имате следните продажби таблица.
+------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2021-01-01 | 200 | | 2 | 2021-01-02 | 250 | | 3 | 2021-01-03 | 220 | | 4 | 2021-01-04 | 230 | | 5 | 2021-01-05 | 210 | | 6 | 2021-01-06 | 100 | | 7 | 2021-01-07 | 120 | | 8 | 2021-01-08 | 150 | | 9 | 2021-01-09 | 180 | | 10 | 2021-01-10 | 200 | +------+------------+--------+
Ето пример за използване на номер_ред функция за подреждане на редовете в низходящ ред на количество колона.
mysql> select row_number() over ( order by amount desc) row_num, amount from sales order by amount desc; +---------+--------+ | row_num | amount | +---------+--------+ | 1 | 250 | | 2 | 230 | | 3 | 220 | | 4 | 210 | | 5 | 200 | | 6 | 200 | | 7 | 180 | | 8 | 150 | | 9 | 120 | | 10 | 100 | +---------+--------+
В горната заявка ние третираме цялата таблица като един дял и не предоставяме клауза PARTITION BY. Ние също така подреждаме тези редове в низходящ ред по колона за количество и използваме row_number() функция за класиране на тези редове.
Ако обаче използвате MySQL <8.0, ето стъпките за получаване на номер_ред в MySQL.
mysql> SELECT t.*, @rownum := @rownum + 1 AS rank FROM sales t, (SELECT @rownum := 0) r order by amount desc; +------+---------------------+--------+------+ | id | order_date | amount | rank | +------+---------------------+--------+------+ | 1 | 2021-02-02 08:15:00 | 250 | 1 | | 10 | 2021-02-02 11:15:00 | 250 | 2 | | 5 | 2021-02-02 09:30:00 | 250 | 3 | | 9 | 2021-02-02 10:45:00 | 200 | 4 | | 12 | 2021-02-02 11:45:00 | 200 | 5 | | 6 | 2021-02-02 09:45:00 | 200 | 6 | | 2 | 2021-02-02 08:30:00 | 200 | 7 | | 7 | 2021-02-02 10:15:00 | 180 | 8 | | 3 | 2021-02-02 08:55:00 | 150 | 9 | | 11 | 2021-02-02 11:30:00 | 150 | 10 | | 4 | 2021-02-02 09:15:00 | 125 | 11 | | 8 | 2021-02-02 10:30:00 | 125 | 12 | +------+---------------------+--------+------+
В горната SQL заявка използваме временна променлива rownum за съхраняване на номера на ред. Когато MySQL последователно преминава през редовете, той присвоява rownum към всеки ред по нарастващ начин.
Нуждаете се от инструмент за отчитане за MySQL? Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте го днес!