MySQL查询各城市最高时薪语句报错(错误码1064)求助
问题分析与解决
你的查询报错1064是因为两个语法问题:
- 子查询中
rank() over(partition by city order by hourly_pay desc)没有指定列别名,外层查询无法引用这个计算列; rank是MySQL的保留关键字,直接在where子句中使用rank = 1会触发语法解析错误。
修正后的查询语句
给窗口函数的计算结果指定一个合法的别名(比如ranking),即可正常过滤:
select * from ( select *, rank() over(partition by city order by hourly_pay desc) as ranking from persons ) as b where ranking = 1;
如果一定要用rank作为别名,需要用反引号将其括起来(避免和关键字冲突):
select * from ( select *, rank() over(partition by city order by hourly_pay desc) as `rank` from persons ) as b where `rank` = 1;
预期结果
执行修正后的语句后,会返回每个城市时薪最高的行:
| ID | Name1 | dates | hourly_pay | city | ranking |
|---|---|---|---|---|---|
| 1 | Mohit | 2016-07-07 | 12000 | nashik | 1 |
| 3 | rishi | 2019-07-07 | 12000 | raipur | 1 |
| 4 | kartik | 2020-08-18 | 25000 | jaipur | 1 |
| 5 | stephan | 2010-04-18 | 17000 | bilaspur | 1 |
| 15 | drake | 2001-01-01 | 20000 | delhi | 1 |
| 7 | arjun | 2009-05-05 | 42000 | gurgaon | 1 |
| 8 | shub | 2005-04-05 | 52000 | chennai | 1 |
| 9 | joe | 2010-05-05 | 32000 | panji | 1 |
| 10 | wade | 2001-04-05 | 49000 | chandigar | 1 |
| 11 | karti | 2008-04-05 | 72000 | singapore | 1 |
| 13 | mokshi | 2005-05-05 | 33000 | mumbai | 1 |
| 14 | hema | 2005-05-05 | 60000 | deradun | 1 |
内容的提问来源于stack exchange,提问作者Abhishek Rohilla
相关产品推荐
相关产品推荐

