解决:
1,使用mysql 中的DENSE_RANK() 窗口函数:为分区或结果集中的每一行分配排名,而排名值没有间隙。(在mysql 8.02后续版本中支持)
SELECT
score,
DENSE_RANK() OVER (ORDER BY score DESC) AS 'rank'
FROM
Scores
ORDER BY
score DESC;
2,使用相关子查询 COUNT(DISTINCT ...):
根据指定的列统计记录总数,不包含重复的记录,不包括NULL或空的值。
SELECT
S1.score,
(
SELECT
COUNT(DISTINCT S2.score)
FROM
Scores S2
WHERE
S2.score >= S1.score
) AS 'rank'
FROM
Scores S1
ORDER BY
S1.score DESC;
作者:力扣官方题解
链接:https://leetcode.cn/problems/rank-scores/solutions/2366211/fen-shu-pai-ming-by-leetcode-solution-qekv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
好吧,其实感觉方法一更好理解,方法二感觉更加奇妙。