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

MySQL使用dense_rank查询第二高薪水 解决LeetCode提交不通过问题

你提交的SQL无法通过测试主要存在两个问题:

  1. 当不存在第二高薪资(如表内仅1条员工记录、所有员工薪资相同)时,where salary_order=2没有匹配行,最终返回空集,不符合题目要求该场景返回null的规则。你使用的coalesce(salary, null)在此场景下完全不生效,因为coalesce仅能处理返回行中字段为null的情况,无法处理无返回行的场景。
  2. 当多名员工薪资并列第二时,查询会返回多条重复记录,不符合题目要求返回单一值的规则。

使用dense_rank完全可以实现需求,修正后的写法参考:

WITH temp1 AS (
    SELECT 
        salary,
        DENSE_RANK() OVER (ORDER BY salary DESC) AS salary_order
    FROM employee
)
SELECT MAX(salary) AS SecondHighestSalary
FROM temp1
WHERE salary_order = 2;

上述写法中MAX聚合函数同时解决了两个问题:无匹配行时MAX会自动返回null,存在多并列第二的薪资时MAX也只会返回唯一的薪资值,完全匹配题目要求。

如果不想使用聚合函数,也可以用嵌套子查询的方式实现:

SELECT (
    SELECT DISTINCT salary
    FROM (
        SELECT 
            salary,
            DENSE_RANK() OVER (ORDER BY salary DESC) AS salary_order
        FROM employee
    ) temp1
    WHERE salary_order = 2
) AS SecondHighestSalary;

内层子查询无匹配结果时,外层SELECT会自动返回null,搭配DISTINCT也能避免并列第二返回重复值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:00