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

SQL查询employee表:第二高薪资缺失时返回最高薪资的实现问题

现有代码问题说明

  1. 你代码里的coalesce(2,1)没有实际作用:coalesce返回第一个非空参数,2是固定非空值,所以这部分永远返回2,自然永远不会取到rnk=1的结果,没法处理只有一行薪资的场景。
  2. 直接按rnk筛选会返回多行:如果存在多名员工薪资相同的情况,rank()会给相同薪资的员工分配相同的排名,筛选时就会返回多条符合条件的记录。

解决方案1:窗口函数版本

适合需要同时兼容更多排名查询的场景,用薪资档位计数判断是否存在第二高薪资,加LIMIT保证仅返回1行:

SELECT salary AS "SecondHighestSalary"
FROM (
    SELECT 
        salary,
        DENSE_RANK() OVER(ORDER BY salary DESC) AS rnk,
        COUNT(DISTINCT salary) OVER() AS sal_level_count
    FROM employee2
) t
WHERE rnk = CASE WHEN sal_level_count >= 2 THEN 2 ELSE 1 END
LIMIT 1;

解决方案2:子查询+COALESCE版本

写法更简洁,直接针对需求实现,天生仅返回单行结果:

SELECT COALESCE(
    -- 取第二高的去重薪资,不存在时返回NULL
    (SELECT DISTINCT salary FROM employee2 ORDER BY salary DESC LIMIT 1 OFFSET 1),
    -- 上一步为NULL时,返回最高薪资
    (SELECT DISTINCT salary FROM employee2 ORDER BY salary DESC LIMIT 1)
) AS "SecondHighestSalary";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:36:05