MySQL 8.0+ hỗ trợ hàm cửa sổ ROW_NUMBER() OVER() để tạo số thứ tự hàng trong kết quả truy vấn.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable1342 (Score INT);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1342 VALUES(80), (98), (78), (89);
Xem dữ liệu:
mysql> SELECT * FROM DemoTable1342;
+-------+ | Score | +-------+ | 80 | | 98 | | 78 | | 89 | +-------+
Thêm cột Rank (số thứ tự) sắp xếp Score giảm dần:
mysql> SELECT Score, ROW_NUMBER() OVER(ORDER BY Score DESC) AS `Rank` FROM DemoTable1342;
Kết quả:
+-------+------+ | Score | Rank | +-------+------+ | 98 | 1 | | 89 | 2 | | 80 | 3 | | 78 | 4 | +-------+------+
Các hàm cửa sổ liên quan:
ROW_NUMBER(): 1, 2, 3... (duy nhất).RANK(): 1, 2, 2, 4... (bỏ số khi trùng).DENSE_RANK(): 1, 2, 2, 3... (không bỏ số).
MySQL < 8.0: Dùng biến session: SET @rownum = 0; SELECT @rownum := @rownum + 1 AS rank, ... ORDER BY Score DESC;.