178.等级分数



我试图用子查询方法解决问题,我得到了一个我无法理解的行为。

select score,
(select count(distinct s1.score) from scores s1 
where s1.score > s2.score)+1 as 'rank' 
from scores s2 
order by s2.score desc;

上面的代码运行得很好,但是:

  • 在查询的第3行,如果我尝试使用rank而不是'rank' leetcode编译器给出了一个错误。
  • 在最后一行,如果我尝试按排名排序,它会显示一个错误,而排名按分数工作正常。

请解释为什么会发生。非常感谢您考虑我的请求。

从MySQL 8+开始,RANK已经成为一个保留的MySQL关键字。这是因为MySQL 8+引入了一个名为RANK的分析函数。所以,如果你想使用RANK作为别名,你应该用反引号或双引号转义:

SELECT score,
(SELECT COUNT(DISTINCT s1.score) FROM scores s1
WHERE s1.score > s2.score) + 1 AS `rank`
FROM scores s2
ORDER BY `rank` DESC;

最新更新