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!