Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите row_number в MySQL

Понякога може да се наложи да получите номер на ред в 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 улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте го днес!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL SELECT WHERE дата и час съвпада с ден (и не непременно час)

  2. Използвайте mysqldump за архивиране на MySQL или MariaDB

  3. Как да запишете резултат от MySQL заявка в .CSV файл

  4. C# с параметри на MySQL INSERT

  5. Промяна на ограничението за Mysql размер на ред е твърде голям