在MySQL中,根据不同的需求,查询排名可以分为并列排名和连续排名两种情况。
以下是分别实现这两种排名的方法,考虑到兼容性,这里会提供适合较早版本MySQL(即8.0之前版本)的解决方案,同时也提及MySQL 8.0及以上版本的新特性。
示例:查询学生成绩排名
假设有一个scores表,包含学生的student_id和他们的score:
CREATE TABLE scores (
student_id INT,
score DECIMAL(4,2)
);
INSERT INTO scores VALUES
(1, 95.00),
(2, 90.00),
(3, 95.00),
(4, 85.00),
(5, 78.00);
1、在MySQL(即8.0之前版本)中,由于不支持RANK()或DENSE_RANK()这类窗口函数,所以在早期版本中实现查询排名通常需要借助用户变量。
1.1、并列排名
对于并列排名,即分数相同的学生共享同一个排名,可以使用用户变量来实现。
以下是一个示例:
SET @rank := 0;
SET @prev_score := NULL;
SELECT
student_id,
score,
@rank := IF(@prev_score = score, @rank, @rank + 1) AS