Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hàm RANK() trong MySQL?


RANK() (window function, MySQL 8.0+) gán thứ hạng cho mỗi hàng trong partition. Giá trị trùng → cùng rank, rank tiếp theo bị nhảy (gap).

Tạo bảng

mysql> CREATE TABLE RankDemo (Id INT);
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO RankDemo VALUES(1),(3),(3),(4),(5);
Query OK, 5 rows affected
mysql> SELECT * FROM RankDemo;
+------+
| Id   |
+------+
| 1    |
| 3    |
| 3    |
| 4    |
| 5    |
+------+
5 rows in set (0.00 sec)

Áp dụng RANK()

mysql> SELECT Id, RANK() OVER (ORDER BY Id) AS Ranking
    -> FROM RankDemo;
+------+---------+
| Id   | Ranking |
+------+---------+
| 1    | 1       |
| 3    | 2       |
| 3    | 2       |
| 4    | 4       |
| 5    | 5       |
+------+---------+
5 rows in set (0.04 sec)

Hai hàng Id=3 cùng rank 2 → rank tiếp theo là 4 (bỏ qua 3).

Liên quan: DENSE_RANK() không nhảy rank (sẽ là 1,2,2,3,4), ROW_NUMBER() luôn duy nhất (1,2,3,4,5).