按名字排序失效:获取第N高薪资SQL排序异常技术求助
解决第N高薪资查询的排序问题
我明白你遇到的问题了——你的SQL确实能正确找出第N高薪资的所有员工,但排序没生效是因为你没在主查询的末尾加上明确的ORDER BY子句。数据库在没有指定排序规则时,会按照数据存储的物理顺序返回结果,这就是为什么你的输出没有按first_name的字母顺序排列。
修正后的SQL代码
SELECT first_name, last_name, salary FROM Employees E1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(E2.Salary)) FROM Employees E2 WHERE E2.Salary > E1.Salary ) ORDER BY first_name ASC;
关键说明
- 原查询的核心逻辑是正确的:通过子查询统计比当前员工薪资高的不同薪资数量,来定位第N高薪资的员工(当有多人薪资相同时,会返回所有符合条件的记录)。
- 新增的
ORDER BY first_name ASC子句会在筛选出目标记录后,强制按first_name的字母升序排列结果,这样就能得到你期望的输出:Alberto Errazuriz 12000.00
Nancy Greenberg 12000.00
如果你的数据库默认排序不区分大小写(比如MySQL的部分字符集),可以根据需要调整排序规则,例如:
ORDER BY first_name COLLATE utf8mb4_bin ASC;
内容的提问来源于stack exchange,提问作者john smith jr
相关产品推荐
相关产品推荐

