You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询第N高薪资的员工?SQL语句报错(Error 1248)求助

解决MySQL错误Code 1248:派生表必须有别名的问题

这个错误的核心原因是:MySQL要求所有作为主查询数据源的子查询(即派生表)必须指定别名,你的原语句里的子查询没有命名,因此触发报错。

修正后的查询语句

1. 查询固定第3高薪资的员工

select * from (select *, row_number() over(order by salary desc) r from p) as t where r = 3;

注:要获取“第N高”薪资,需要按薪资降序排序(否则row_number()会将最低薪资标记为序号1),所以调整了排序规则。同时给子查询添加了别名t。

2. 使用变量&n查询第N高薪资的员工

select * from (select *, row_number() over(order by salary desc) r from p) as t where r = &n;

补充优化建议

如果表中存在重复薪资,row_number()会给相同薪资分配不同的序号,可能导致结果不符合“第N高”的实际需求。这种场景下可以改用dense_rank()函数,它会为重复薪资分配相同的序号:

select * from (select *, dense_rank() over(order by salary desc) r from p) as t where r = &n;

内容的提问来源于stack exchange,提问作者June

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:40:16