sql >> Database >  >> RDS >> Mysql

Hoe rijnummer in MySQL te krijgen

Soms moet u mogelijk een rijnummer in MySQL krijgen voor rapportage en analyse. Rijnummer is erg handig bij het rangschikken en sorteren van gegevens. Het is ook handig bij het filteren van gegevens op basis van rijnummerwaarde. In dit artikel zullen we bekijken hoe u row_number . kunt krijgen in MySQL.


Hoe rijnummer in MySQL te krijgen

De functie Row_number() is standaard beschikbaar sinds MySQL 8.0.

Hier is de syntaxis van row_number() syntaxis. Houd er rekening mee dat de clausule PARTITION BY optioneel is.

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

Stel dat u de volgende verkopen heeft tafel.

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

Hier is een voorbeeld van het gebruik van rijnummer functie om rijen te rangschikken in aflopende volgorde van bedrag kolom.

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

In de bovenstaande query behandelen we de hele tabel als een enkele partitie en bieden we geen PARTITION BY-clausule. We rangschikken deze rijen ook in aflopende volgorde op kolombedrag en gebruiken row_number() functie om deze rijen te rangschikken.

Als u echter MySQL <8.0 gebruikt, zijn hier de stappen om row_number te krijgen in 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 |
 +------+---------------------+--------+------+

In de bovenstaande SQL-query gebruiken we een tijdelijke variabele rownum rijnummer op te slaan. Wanneer MySQL de rijen opeenvolgend doorloopt, wijst het rownum toe stapsgewijs naar elke rij.

Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te monitoren. Probeer het vandaag nog!

  1. 9 beste praktijken voor het schrijven van SQL-query's

  2. Hoe klob-veldgegevens te exporteren in Oracle SQL Developer

  3. Databaseproxy-failovertijden vergelijken - ProxySQL, MaxScale en HAProxy

  4. SQL Server:moet ik information_schema-tabellen gebruiken in plaats van sys-tabellen?