À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!