MySQL中使用RANK()函数按薪资排名报错问题排查
解决MySQL中RANK()函数别名的语法错误问题
嘿,这个问题很常见!你执行查询时出错的核心原因是**Rank是MySQL的保留关键字**,直接拿它当列别名会让MySQL的语法解析器混乱,这就是那些错误提示的由来。
为啥会报错?
MySQL有一批内置的保留关键字,RANK(包括大小写形式)就在其中。当你写AS Rank时,MySQL会误以为你在使用这个关键字,而不是自定义的列别名,自然就抛出了语法错误,比如提示你“之前已经找到一个别名”或者“意外的标记”。
两种快速修正方案
你可以任选一种解决办法:
- 给别名加反引号:用反引号把
Rank包起来,明确告诉MySQL这是一个自定义别名,不是关键字
SELECT id, employee_name, employee_salary, RANK() OVER (ORDER BY employee_salary DESC) AS `Rank` FROM employee;
- 换个非保留字别名:比如换成
salary_rank这类不会和关键字冲突的名字,代码更清爽
SELECT id, employee_name, employee_salary, RANK() OVER (ORDER BY employee_salary DESC) AS salary_rank FROM employee;
额外小提醒
你原来的查询只选了salary(应该是笔误,你表中的字段是employee_salary吧?),如果要得到你期望的完整结果,记得把id和employee_name也加到SELECT列表里哦。修正后执行,就能得到你想要的排名结果:
| id | employee_name | employee_salary | Rank |
|---|---|---|---|
| 4 | Flora | 8000 | 1 |
| 2 | Su | 4000 | 2 |
| 1 | Martin | 3500 | 3 |
| 3 | Alex | 3500 | 3 |
内容的提问来源于stack exchange,提问作者Amit Sharma
相关产品推荐
相关产品推荐

