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

SQL JOIN操作报错求助:查询最低工资低于5000的部门数据

问题排查与解决方案

报错原因

WHERE 子句用于过滤单条原始数据行,不能直接使用MIN()这类聚合函数——聚合函数是对一组数据做统计计算的,必须配合GROUP BY完成分组后,在HAVING子句中使用来过滤分组结果。你在WHERE里调用min(e.salary),违反了SQL语法规则,因此触发"group function is not allowed here"错误。

正确SQL语句

写法1(先聚合再关联,效率更优)

先从员工表统计出最低工资低于5000的部门,再关联部门表获取完整部门数据:

SELECT d.*
FROM hr.departments d
INNER JOIN (
    SELECT department_id, MIN(salary) AS min_salary
    FROM hr.employees
    GROUP BY department_id
    HAVING MIN(salary) < 5000
) e_sal_stats ON d.department_id = e_sal_stats.department_id
ORDER BY d.department_id;

写法2(关联后分组过滤)

直接关联两张表,按部门分组后用HAVING过滤最低工资符合条件的分组:

SELECT d.department_id, d.department_name, d.manager_id, d.location_id
FROM hr.departments d
LEFT JOIN hr.employees e ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name, d.manager_id, d.location_id
HAVING MIN(e.salary) < 5000
ORDER BY d.department_id;

注:如果存在无员工的部门,MIN(e.salary)会返回NULL,由于NULL < 5000不成立,这类部门不会被纳入结果,符合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:45:39