Fungsi MySQL RANK
Ringkasan : dalam tutorial Fungsi MySQL RANK, Anda akan belajar tentang RANK()fungsi MySQL dan bagaimana menerapkannya untuk menetapkan peringkat ke setiap baris dalam partisi set hasil.
Perhatikan bahwa MySQL telah mendukung RANK()fungsi dan fungsi Windows lainnya sejak versi 8.0
Pengenalan RANK()fungsi MySQL
The RANK()Fungsi memberikan peringkat untuk setiap baris dalam partisi dari satu set hasil. Pangkat baris ditentukan oleh satu ditambah jumlah peringkat yang ada sebelumnya.
Berikut ini adalah sintaks dari RANK()fungsi tersebut:
RANK() OVER (
PARTITION BY <expression>[{,<expression>…}]
ORDER BY <expression> [ASC|DESC], [{,<expression>…}]
)
Bahasa kode: SQL (Structured Query Language) ( sql )
Dalam sintaks ini:
- Pertama, PARTITION BYklausa membagi kumpulan hasil menjadi beberapa partisi. The RANK()Fungsi dilakukan dalam partisi dan kembali diinisialisasi saat melintasi batas partisi.
- Kedua, ORDER BYKlausa mengurutkan baris dalam partisi dengan satu atau lebih kolom atau ekspresi.
Berbeda dengan ROW_NUMBER()fungsinya, RANK()fungsi tersebut tidak selalu mengembalikan bilangan bulat berurutan.
Misalkan kita memiliki tabel contoh sebagai berikut:
CREATE TABLE t (
val INT
);
INSERT INTO t(val)
VALUES(1),(2),(2),(3),(4),(4),(5);
SELECT * FROM t;
Bahasa kode: SQL (Structured Query Language) ( sql )
Pernyataan berikut menggunakan RANK()fungsi untuk menetapkan peringkat ke setiap baris dari hasil yang ditetapkan dalam ttabel:
SELECT
val,
RANK() OVER (
ORDER BY val
) my_rank
FROM
t;
Bahasa kode: SQL (Structured Query Language) ( sql )
Inilah hasilnya:
Seperti yang Anda lihat, baris kedua dan ketiga memiliki ikatan yang sama sehingga mereka menerima peringkat 2 yang sama.
Baris keempat memiliki peringkat 4 karena RANK()fungsinya melewati peringkat 3.
RANK()Contoh fungsi MySQL
Mari gunakan salestabel yang dibuat di tutorial fungsi Windows untuk demonstrasi.
Jika Anda belum membuat salestabel, berikut skripnya:
CREATE TABLE IF NOT EXISTS sales(
sales_employee VARCHAR(50) NOT NULL,
fiscal_year INT NOT NULL,
sale DECIMAL(14,2) NOT NULL,
PRIMARY KEY(sales_employee,fiscal_year)
);
INSERT INTO sales(sales_employee,fiscal_year,sale)
VALUES(‘Bob’,2016,100),
(‘Bob’,2017,150),
(‘Bob’,2018,200),
(‘Alice’,2016,150),
(‘Alice’,2017,100),
(‘Alice’,2018,200),
(‘John’,2016,200),
(‘John’,2017,150),
(‘John’,2018,250);
SELECT * FROM sales;
Bahasa kode: SQL (Structured Query Language) ( sql )
Gambar berikut menunjukkan data salestabel:
Pernyataan berikut menggunakan RANK()fungsi untuk memberi peringkat karyawan penjualan berdasarkan jumlah penjualan di setiap tahun:
SELECT
sales_employee,
fiscal_year,
sale,
RANK() OVER (PARTITION BY
fiscal_year
ORDER BY
sale DESC
) sales_rank
FROM
sales;
Bahasa kode: SQL (Structured Query Language) ( sql )
Dalam contoh ini:
- Pertama, PARTITION BYklausul memecah kumpulan hasil menjadi beberapa partisi berdasarkan tahun fiskal.
- Kemudian, ORDER BYklausul mengurutkan karyawan penjualan menurut penjualan dalam urutan menurun.
RANK()Fungsi MySQL dengan contoh CTE
Pernyataan berikut menggunakan RANK()fungsi tersebut untuk menemukan tiga pesanan bernilai tertinggi di setiap tahun:
WITH order_values AS(
SELECT
orderNumber,
YEAR(orderDate) order_year,
quantityOrdered*priceEach AS order_value,
RANK() OVER (
PARTITION BY YEAR(orderDate)
ORDER BY quantityOrdered*priceEach DESC
) order_value_rank
FROM
orders
INNER JOIN orderDetails USING (orderNumber)
)
SELECT
*
FROM
order_values
WHERE
order_value_rank <=3;
Bahasa kode: SQL (Structured Query Language) ( sql )
Inilah hasilnya:
Dalam contoh ini:
- Pertama, kami menggunakan ekspresi tabel umum (CTE) untuk mendapatkan nomor pesanan, tahun pesanan, dan peringkat. Untuk memberi peringkat pesanan berdasarkan nilai pesanan di setiap tahun, kami menggunakan RANK()fungsi yang mempartisi baris berdasarkan tahun pesanan dan mengurutkan nilai pesanan dalam urutan menurun.
- Kemudian, kami hanya memilih pesanan yang peringkatnya kurang dari atau sama dengan tiga.
Dalam tutorial ini, Anda telah mempelajari cara menggunakan RANK()fungsi MySQL untuk menetapkan peringkat ke setiap baris dalam kumpulan hasil.

Seorang pengajar dan pembelajar yang mengurus lembaga pelatihan dan kursus komputer bernama LKP Naura