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

Cara Membuat Peringkat Di Atas Partisi di MySQL

Terkadang Anda mungkin perlu membuat peringkat di atas partisi di MySQL atau melakukan peringkat yang dikelompokkan di MySQL. Kami akan melihat bagaimana peringkat di atas partisi menggunakan fungsi peringkat MySQL. Anda dapat menggunakan pendekatan ini untuk menentukan peringkat dalam setiap grup/partisi dalam tabel secara terpisah. Namun, harap dicatat, fungsi ini hanya tersedia dari MySQL 8.0.


Peringkat MySQL atas Partisi

Kami akan menggunakan fungsi MySQL RANK() untuk menentukan peringkat dalam grup. Berikut sintaks fungsi MySQL RANK.

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)

Fungsi peringkat menetapkan peringkat untuk setiap baris dalam partisi sedemikian rupa sehingga peringkat setiap baris adalah satu lebih banyak dari jumlah total baris yang telah diberi peringkat dalam partisi tersebut.

Dalam sintaks di atas, klausa PARTITION BY akan membagi baris menjadi partisi. Anda dapat mempartisi tabel berdasarkan satu atau beberapa nilai kolom. Jika Anda tidak ingin mempartisi tabel, Anda cukup menghilangkan klausa PARTITION BY sama sekali.


Bonus Baca :Cara Mengubah zona waktu MySQL dalam kueri

Fungsi Peringkat akan menghitung peringkat dalam setiap partisi/grup dan menginisialisasi ulang nomor peringkat saat memulai dengan partisi baru.

Klausa ORDER BY mengurutkan baris dalam setiap partisi berdasarkan nilai dalam satu atau beberapa kolom.


Bonus Baca :MySQL Bandingkan database

Katakanlah Anda memiliki tabel berikut.

mysql> create table for_rank(id int, month  varchar(10),amount  int);

mysql> insert into for_rank(id, month, amount)
     values(1,'Jan',450),
     (2,'Jan',350),
     (3,'Jan',250),
     (4,'Feb',150),
     (5,'Feb',450),
     (6,'Feb',500),
     (7,'Mar',350),
     (8,'Mar',450),
     (9,'Mar',250),
     (10,'Mar',150);

mysql> select * from for_rank;
+------+-------+--------+
| id   | month | amount |
+------+-------+--------+
|    1 | Jan   |    450 |
|    2 | Jan   |    350 |
|    3 | Jan   |    250 |
|    4 | Feb   |    150 |
|    5 | Feb   |    450 |
|    6 | Feb   |    500 |
|    7 | Mar   |    350 |
|    8 | Mar   |    450 |
|    9 | Mar   |    250 |
|   10 | Mar   |    150 |
+------+-------+--------+


Bonus Baca :MySQL Tampilkan Indeks di database

Berikut kueri untuk menetapkan peringkat ke setiap baris tabel, tanpa menggunakan klausa PARTITION BY.

SELECT
     id, month, amount, RANK() OVER (
     PARTITION BY Month
     ORDER BY amount desc
     ) my_rank
FROM for_rank;

+------+-------+--------+--------+
| id   | month | amount |  rank  |
+------+-------+--------+--------+
|    6 | Feb   |    500 |     1  |
|    5 | Feb   |    450 |     2  |
|    4 | Feb   |    150 |     3  |
|    1 | Jan   |    450 |     1  |
|    2 | Jan   |    350 |     2  |
|    3 | Jan   |    250 |     3  |
|    8 | Mar   |    450 |     1  |
|    7 | Mar   |    350 |     2  |
|    9 | Mar   |    250 |     3  |
|   10 | Mar   |    150 |     4  |
+------+-------+--------+--------+

Dalam kueri di atas, kami mempartisi tabel berdasarkan nama bulan, dan kemudian memberi peringkat setiap baris dalam setiap partisi dalam urutan jumlah yang menurun.

Semoga sekarang Anda dapat dengan mudah menggunakan fungsi MySQL Rank untuk menentukan peringkat di atas partisi dan grup.

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. Apakah menambahkan 'LIMIT 1' ke kueri MySQL membuatnya lebih cepat ketika Anda tahu hanya akan ada 1 hasil?

  2. MySQL:Pisahkan daftar yang dipisahkan koma menjadi beberapa baris

  3. Bagaimana saya bisa menggunakan operator penugasan MySQL (:=) dalam kueri asli hibernasi?

  4. Mendapatkan semua baris induk dalam satu kueri SQL

  5. WEEKDAY() Contoh – MySQL