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

SQL不使用子查询仅用INTERSECT/UNION/EXCEPT查找第二高薪资及对应员工

第二高薪资员工信息查询方案(仅使用集合运算符,无嵌套子查询)

前提假设

我们默认使用通用员工表结构,你可以根据实际业务表名、字段名做调整:

  • 表名:employee
  • 包含字段:emp_id(员工ID)、emp_name(员工姓名)、salary(薪资)

实现思路

核心通过EXCEPT运算符实现逐层过滤,全程不使用嵌套子查询:

  1. 先筛选出最高薪资的员工集合,从全体员工中排除这部分,得到所有薪资低于最高值的员工
  2. 再从上述结果中排除所有「存在其他员工薪资高于自身」的员工,剩下的就是薪资为第二高的全部员工

可直接运行的SQL代码

(
  SELECT emp_id, emp_name, salary FROM employee
  EXCEPT
  -- 排除最高薪资的所有员工
  (
    SELECT emp_id, emp_name, salary FROM employee
    EXCEPT
    SELECT e1.emp_id, e1.emp_name, e1.salary 
    FROM employee e1 JOIN employee e2 ON e1.salary < e2.salary
  )
)
EXCEPT
-- 排除剩余集合中薪资不是当前范围内最高的员工
SELECT e1.emp_id, e1.emp_name, e1.salary 
FROM employee e1 JOIN employee e2 ON e1.salary < e2.salary

逻辑验证

  • 如果公司仅存在单一薪资档位,查询返回空结果,符合预期
  • 如果多名员工薪资同为第二高,会全部返回,满足需求
  • 所有运算仅使用EXCEPT集合运算符,没有嵌套子查询,符合限制要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:54:02