×

Tính thứ hạng với lệnh RANK trong MySQL

Trong cơ sở dữ liệu MySQL, việc sắp xếp và xếp hạng dữ liệu theo một tiêu chí nhất định là một nhiệm vụ phổ biến và quan trọng. Đây là lý do tại sao lệnh RANK trở nên hữu ích trong nhiều trường hợp khác nhau. Hôm nay, chúng ta sẽ tìm hiểu cách sử dụng RANK trong MySQL để xác định thứ hạng của các dòng dữ liệu dựa trên các tiêu chí cụ thể.

1. Khái niệm RANK trong MySQL

RANK là một hàm cửa sổ (window function) giúp tính toán thứ hạng của một hàng trong tập kết quả trả về của một câu truy vấn SQL. Thứ hạng được xác định dựa trên các giá trị trong một hoặc nhiều cột và có thể được sắp xếp theo thứ tự tăng dần hoặc giảm dần. Khi tính toán thứ hạng, các giá trị trùng lặp sẽ được xếp cùng một thứ hạng, nhưng thứ hạng của hàng tiếp theo sẽ được bỏ qua.

2. Cách sử dụng RANK trong MySQL

Để sử dụng RANK, bạn cần sử dụng cú pháp sau:

SELECT column_name1, column_name2, ..., 
       RANK() OVER ( [PARTITION BY column_name1] ORDER BY column_name2 ASC | DESC ) AS rank
FROM table_name
WHERE condition;
  • PARTITION BY: Tùy chọn này phân chia kết quả thành các tập hợp nhỏ hơn trước khi áp dụng hàm cửa sổ.
  • ORDER BY: Quy định tiêu chí sắp xếp để xác định thứ hạng.

Lưu ý: MySQL hỗ trợ hàm RANK từ phiên bản 8.0 trở lên.

3. Ví dụ minh họa

Giả sử chúng ta có bảng dữ liệu nhan_vien như sau:

ID HoTen PhongBan Luong
1 Nguyen Van A IT 1000
2 Tran Thi B IT 2000
3 Le Van C Sales 3000
4 Hoang Thi D Sales 4000
5 Pham Van E IT 2000

Chúng ta muốn tính thứ hạng của mỗi nhân viên trong mỗi phòng ban dựa trên lương, thì câu truy vấn sẽ như sau:

SELECT ID, HoTen, PhongBan, Luong,
       RANK() OVER (PARTITION BY PhongBan ORDER BY Luong DESC) AS rank
FROM nhan_vien;

Kết quả sẽ là:

ID HoTen PhongBan Luong rank
2 Tran Thi B IT 2000 1
5 Pham Van E IT 2000 1
1 Nguyen Van A IT 1000 3
4 Hoang Thi D Sales 4000 1
3 Le Van C Sales 3000 2

Như bạn thấy, trong phòng ban IT, Tran Thi B và Pham Van E có mức lương giống nhau và cùng được xếp thứ hạng là 1. Hàng tiếp theo, Nguyen Van A, được xếp hạng 3.

4. Kết luận

Việc sử dụng RANK trong MySQL cung cấp một cách hiệu quả để xếp hạng dữ liệu dựa trên các tiêu chí cụ thể. Điều này rất hữu ích trong các báo cáo, phân tích dữ liệu và nhiều tình huống khác trong thực tế. Bằng cách sử dụng hàm cửa sổ như RANK, bạn có thể dễ dàng thực hiện những yêu cầu phức tạp hơn trong các thao tác dữ liệu lớn.

Comments