Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mendapatkan row_number di MySQL

Terkadang Anda mungkin perlu mendapatkan nomor baris di MySQL untuk pelaporan dan analisis. Nomor baris sangat berguna dalam pemeringkatan dan pengurutan data. Ini juga membantu dalam memfilter data berdasarkan nilai nomor baris. Dalam artikel ini, kita akan melihat cara mendapatkan row_number di MySQL.


Cara Mendapatkan row_number di MySQL

Fungsi Row_number() tersedia sejak MySQL 8.0.

Berikut adalah sintaks row_number() sintaksis. Harap diperhatikan, klausa PARTITION BY bersifat opsional.

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

Katakanlah Anda memiliki penjualan berikut ini tabel.

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

Berikut adalah contoh penggunaan row_number berfungsi untuk memberi peringkat baris dalam urutan jumlah 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 |
 +---------+--------+

Dalam kueri di atas, kami memperlakukan seluruh tabel sebagai satu partisi dan tidak menyediakan klausa PARTITION BY. Kami juga mengurutkan baris ini dalam urutan menurun menurut kolom jumlah dan menggunakan row_number() berfungsi untuk memberi peringkat pada baris ini.

Namun, jika Anda menggunakan MySQL <8.0 maka berikut adalah langkah-langkah untuk mendapatkan row_number di 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 |
 +------+---------------------+--------+------+

Dalam kueri SQL di atas, kami menggunakan variabel sementara rownum untuk menyimpan nomor baris. Ketika MySQL secara berurutan melintasi baris, ia menetapkan rownum ke setiap baris secara bertahap.

Butuh alat pelaporan untuk MySQL? Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari Ini!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_SECONDS() Contoh – MySQL

  2. mySQL DataSource di Visual Studio 2012

  3. CONVERT_TZ – Cara Mengubah Zona Waktu MySQL di Query

  4. Kode Kesalahan 1292 - Nilai GANDA salah terpotong - Mysql

  5. MIN/MAX vs ORDER BY dan LIMIT