MySQL 查询出成绩表排名,两种实现方式

创建表

Create table If Not Exists Scores (Id int, Score DECIMAL(3,2));
insert into Scores (Id, Score) values ('1', '3.5');
insert into Scores (Id, Score) values ('2', '3.65');
insert into Scores (Id, Score) values ('3', '4.0');
insert into Scores (Id, Score) values ('4', '3.85');
insert into Scores (Id, Score) values ('5', '4.0');
insert into Scores (Id, Score) values ('6', '3.65');
SELECT * FROM Scores;

SQL查询,方式一(推荐)

SELECT Score,
        CASE
          WHEN @fs = Score THEN @pm
          WHEN @fs := Score THEN @pm := @pm + 1
          END Rank
FROM Scores,
     (SELECT @pm := 0,@fs := null) a
ORDER BY Score DESC;

SQL查询,方式二

SELECT a.Score, SUM(CASE WHEN b.Score >= a.Score THEN 1 END) as Rank
FROM Scores a,
     (SELECT DISTINCT Score FROM Scores) b
GROUP BY a.id,a.Score
ORDER BY a.Score DESC;
posted @ 2025-04-08 23:57  程序员の奇妙冒险  阅读(43)  评论(0)    收藏  举报