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

MySQL查询:如何筛选员工数<20且平均薪资<2000的部门信息

没问题,我来帮你搞定这个查询!

正确的MySQL查询写法

要实现你的需求,我们需要先对员工表按部门分组聚合数据,再关联部门表获取名称,最后过滤出符合条件的部门。完整的查询语句如下:

SELECT 
    d.dept_id,
    d.dept_name,
    ROUND(AVG(e.salary), 2) AS avg_salary, -- 保留两位小数让结果更直观,可选
    COUNT(e.emp_id) AS emp_count
FROM 
    Departments d
INNER JOIN 
    Employees e ON d.dept_id = e.dept_id
GROUP BY 
    d.dept_id, d.dept_name -- MySQL 5.7及以上版本要求GROUP BY包含所有非聚合字段
HAVING 
    COUNT(e.emp_id) < 20 
    AND AVG(e.salary) < 2000;

关键部分拆解说明:

  • INNER JOIN:关联部门表和员工表,确保我们只获取有员工的部门(如果需要包含无员工的部门,可以换成LEFT JOIN,但这类部门的平均薪资为NULL,会被后续的HAVING条件过滤掉)。
  • GROUP BY:按部门ID和名称分组,这样才能计算每个部门的聚合指标(平均薪资、员工数)。
  • AVG(e.salary):计算每个部门的平均薪资,用ROUND()可以让数值更整洁。
  • COUNT(e.emp_id):统计每个部门的员工数量(用emp_id而非*能避免统计NULL值,若emp_id是主键,两者效果一致)。
  • HAVING子句:专门用于过滤分组后的聚合结果,因为WHERE子句不能直接使用聚合函数(比如AVG()、COUNT())。

为什么你之前的语句达不到需求?

你写的SELECT dept_id, salary FROM employees WHERE (salary) < 2000;只是筛选出了薪资低于2000的单个员工记录,但没有按部门进行聚合统计,所以无法得到部门级别的平均薪资和员工总数,也没法关联获取部门名称。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:44:08