我试图用子查询方法解决问题,我得到了一个我无法理解的行为。
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;