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

如何修改SQL函数实现存在重复薪资时正确返回第N高薪资

错误原因

原代码存在两处核心逻辑缺陷:

  • 直接通过id关联计算排名,没有和薪资的排序规则挂钩,若薪资不随id递增会直接返回错误结果
  • 未对薪资做去重排名处理,相同薪资会被算作不同的排名位,重复薪资场景下无法得到正确结果
修复代码

适配MySQL等支持LIMIT语法的数据库

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  -- LIMIT偏移从0开始,第N高对应偏移量为N-1
  SET N = N - 1;
  RETURN (
      SELECT DISTINCT Salary
      FROM Employee
      ORDER BY Salary DESC
      LIMIT N, 1
  );
END

适配题目提到的SQL Server数据库

SQL Server不支持LIMIT语法,使用窗口函数DENSE_RANK实现更合理:

CREATE FUNCTION getNthHighestSalary(@N INT) RETURNS INT
AS
BEGIN
  RETURN (
      SELECT TOP 1 Salary
      FROM (
          SELECT Salary, DENSE_RANK() OVER(ORDER BY Salary DESC) AS rank_num
          FROM Employee
      ) AS temp
      WHERE rank_num = @N
  );
END
适配性说明
  • 针对所有薪资相同的测试用例,去重后仅存在1个薪资档位,当N>1时查询无匹配结果,返回NULL符合要求
  • DENSE_RANK窗口函数会给相同薪资分配相同的排名,不会占用多个排名位,完全符合“第N高薪资”的统计逻辑
  • 若需要更严谨的边界处理,可增加对N<1的判断,直接返回NULL即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:07