Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter row_number no MySQL


Às vezes, você pode precisar obter o número da linha no MySQL para relatórios e análises. O número da linha é muito útil na classificação e classificação de dados. Também é útil na filtragem de dados com base no valor do número da linha. Neste artigo, veremos como obter row_number em MySQL.



Como obter row_number no MySQL


A função Row_number() está disponível desde o MySQL 8.0.

Aqui está a sintaxe de row_number() sintaxe. Observe que a cláusula PARTITION BY é opcional.
ROW_NUMBER() OVER (
     PARTITION BY <expression(s)> 
     ORDER BY <expression(s)> [ASC|DESC])

Digamos que você tenha as seguintes vendas tabela.
 +------+------------+--------+
 | 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 |
 +------+------------+--------+

Aqui está um exemplo de uso de row_number função para classificar linhas em ordem decrescente de quantidade coluna.
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 |
 +---------+--------+

Na consulta acima, tratamos a tabela inteira como uma única partição e não fornecemos a cláusula PARTITION BY. Também ordenamos essas linhas em ordem decrescente por coluna de valor e usamos row_number() função para classificar essas linhas.

No entanto, se você estiver usando o MySQL <8.0, aqui estão as etapas para obter row_number em 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 |
 +------+---------------------+--------+------+

Na consulta SQL acima, usamos uma variável temporária rownum para armazenar o número da linha. Quando o MySQL percorre sequencialmente as linhas, ele atribui rownum para cada linha de forma incremental.

Precisa de uma ferramenta de relatório para MySQL? O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!