如何查询第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
相关产品推荐
相关产品推荐

