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

求助:编写SQL查询薪资高于所有非经理员工的经理列表

问题分析与修正方案

你的SQL存在几个关键问题:

  • 语法错误:max.salary是无效写法,你没有定义名为max的表或别名,而且WHERE子句里不能直接用聚合函数(比如MAX(b.salary))做条件判断,聚合函数要放在HAVING子句或者子查询里。
  • 逻辑偏差:你用b.chief_id = a.id关联了经理和他的下属,但需求是对比所有非经理员工的最高薪资,不是该经理下属的薪资,这个连接完全没必要。
  • 表连接方式过时:逗号连接表是旧写法,建议用显式的JOIN语法,可读性更强。

正确的SQL写法

先明确定义:

  • 经理:chief_id IS NULL的员工
  • 非经理:chief_id IS NOT NULL的员工

基础版(只返回符合条件的经理)

SELECT *
FROM employee
WHERE chief_id IS NULL
  AND salary > (
    -- 先算出所有非经理的最高薪资
    SELECT MAX(salary)
    FROM employee
    WHERE chief_id IS NOT NULL
  );

进阶版(同时展示非经理的最高薪资)

如果需要在结果里显示非经理的最高薪资作为参考,可以用子查询关联:

SELECT emp.*, non_mgr_max.top_salary
FROM employee emp
-- 把非经理最高薪资作为临时表关联
CROSS JOIN (
    SELECT MAX(salary) AS top_salary
    FROM employee
    WHERE chief_id IS NOT NULL
) non_mgr_max
WHERE emp.chief_id IS NULL
  AND emp.salary > non_mgr_max.top_salary;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:32:46