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