Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir row_number dans MySQL

Parfois, vous devrez peut-être obtenir le numéro de ligne dans MySQL pour les rapports et l'analyse. Le numéro de ligne est très utile pour classer et trier les données. Il est également utile de filtrer les données en fonction de la valeur du numéro de ligne. Dans cet article, nous verrons comment obtenir row_number dans MySQL.


Comment obtenir row_number dans MySQL

La fonction Row_number() est disponible prête à l'emploi depuis MySQL 8.0.

Voici la syntaxe de row_number() syntaxe. Veuillez noter que la clause PARTITION BY est facultative.

ROW_NUMBER() OVER (
     PARTITION BY <expression(s)> 
     ORDER BY <expression(s)> [ASC|DESC])

Disons que vous avez les ventes suivantes tableau.

 +------+------------+--------+
 | 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 |
 +------+------------+--------+

Voici un exemple d'utilisation de row_number fonction pour classer les lignes par ordre décroissant de montant colonne.

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 |
 +---------+--------+

Dans la requête ci-dessus, nous traitons la table entière comme une seule partition et ne fournissons pas la clause PARTITION BY. Nous classons également ces lignes par ordre décroissant par colonne de montant et utilisons row_number() fonction pour classer ces lignes.

Cependant, si vous utilisez MySQL <8.0, voici les étapes pour obtenir row_number dans 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 |
 +------+---------------------+--------+------+

Dans la requête SQL ci-dessus, nous utilisons une variable temporaire rownum pour stocker le numéro de ligne. Lorsque MySQL parcourt séquentiellement les lignes, il attribue rownum à chaque ligne de manière incrémentielle.

Besoin d'un outil de reporting pour MySQL ? Ubiq permet de visualiser facilement les données en quelques minutes et de les surveiller dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !