2025年--Lc172--H178 .分数排名(SQL)--Java版
1.题目
2.思路
(1)将 Scores 表与自身连接,以便我们得到所有分数大于或等于此分数的所有行。
(2)将查询行按 id 和 score 值进行分组。
(3)计算唯一的分数的数量,它应该大于或等于连接条件中使用的分数(也就是排名)。
(4)按 score 值对结果集进行排序。
补充
COUNT(DISTINCT T.score):对当前分组下(由外层表 S 的每个分数确定)的连接结果里,统计 不重复的分数个数。DISTINCT 的意思是:去重。在 SQL 里用来把重复的值或重复的整行只保留一份。
AS ‘rank’:把这一统计结果的列名起别名叫 rank(在 MySQL 里用单引号也能起别名,更推荐写成 AS rank 或 AS rank
)。
3.代码实现
select
S.score ,
Count(DISTINCT T.score) AS 'rank'
from
Scores S
INNER JOIN Scores T on S.score<=T.score
GROUP BY
S.id,
S.score
Order By
S.score Desc;