Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie row_number in MySQL

Manchmal müssen Sie möglicherweise die Zeilennummer in MySQL für Berichte und Analysen abrufen. Die Zeilennummer ist sehr nützlich beim Ranking und Sortieren von Daten. Es ist auch hilfreich beim Filtern von Daten basierend auf dem Wert der Zeilennummer. In diesem Artikel sehen wir uns an, wie man row_number erhält in MySQL.


So erhalten Sie row_number in MySQL

Die Funktion Row_number() ist seit MySQL 8.0 standardmäßig verfügbar.

Hier ist die Syntax von row_number() Syntax. Bitte beachten Sie, dass die PARTITION BY-Klausel optional ist.

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

Nehmen wir an, Sie haben die folgenden Verkäufe Tabelle.

 +------+------------+--------+
 | 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 ist ein Beispiel für die Verwendung von row_number Funktion, um Zeilen in absteigender Reihenfolge von Betrag zu ordnen Säule.

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 der obigen Abfrage behandeln wir die gesamte Tabelle als einzelne Partition und stellen keine PARTITION BY-Klausel bereit. Wir ordnen diese Zeilen auch in absteigender Reihenfolge nach Betragsspalte und verwenden row_number() Funktion, um diese Zeilen zu ordnen.

Wenn Sie jedoch MySQL <8.0 verwenden, finden Sie hier die Schritte zum Abrufen von row_number 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 der obigen SQL-Abfrage verwenden wir eine temporäre Variable rownum Zeilennummer zu speichern. Wenn MySQL die Zeilen sequentiell durchläuft, weist es rownum zu zu jeder Zeile inkrementell.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!