Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere row_number in MySQL

A volte potrebbe essere necessario ottenere il numero di riga in MySQL per il reporting e l'analisi. Il numero di riga è molto utile per classificare e ordinare i dati. È anche utile per filtrare i dati in base al valore del numero di riga. In questo articolo, vedremo come ottenere numero_riga in MySQL.


Come ottenere row_number in MySQL

La funzione Row_number() è disponibile immediatamente a partire da MySQL 8.0.

Ecco la sintassi di numero_riga() sintassi. Tieni presente che la clausola PARTITION BY è facoltativa.

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

Supponiamo che tu abbia le seguenti vendite tabella.

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

Ecco un esempio di utilizzo di numero_riga per classificare le righe in ordine decrescente di importo colonna.

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

Nella query precedente, trattiamo l'intera tabella come una singola partizione e non forniamo la clausola PARTITION BY. Inoltre, ordiniamo queste righe in ordine decrescente in base alla colonna dell'importo e utilizziamo row_number() funzione per classificare queste righe.

Tuttavia, se stai usando MySQL <8.0, ecco i passaggi per ottenere 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 |
 +------+---------------------+--------+------+

Nella query SQL precedente, utilizziamo una variabile temporanea rownum per memorizzare il numero di riga. Quando MySQL attraversa in sequenza le righe, assegna rownum ad ogni riga in modo incrementale.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!