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

如何编写SQL查询:显示员工数大于5的部门编号及员工数量

解决部门员工数统计的SQL查询问题

首先看你的需求:要展示部门编号(deptno)和对应部门的员工数量,并且只保留员工人数超过5人的部门。你的现有查询有两个关键问题:

  1. 你只选择了D.DNAME(部门名称),所以自然看不到部门编号和员工数量
  2. 过滤条件写的是> 3,和你需求里的> 5不匹配

下面给你两种可行的解决方案,优先推荐第一种,因为效率更高:

方案1:使用GROUP BY + HAVING(推荐)

这是统计分组数据最标准的写法,只需要扫描一次员工表,性能更优:

SELECT 
    deptno, 
    COUNT(*) AS employee_count
FROM emp
GROUP BY deptno
HAVING COUNT(*) > 5;
  • GROUP BY deptno:按照部门编号对员工进行分组
  • COUNT(*):统计每个分组里的员工数量,通过AS给结果列起一个易读的别名
  • HAVING COUNT(*) > 5:过滤出员工数量超过5的分组(注意这里不能用WHERE,因为WHERE是过滤单条行数据,HAVING才是过滤分组后的聚合结果)

如果需要同时显示部门名称,可以关联dept表:

SELECT 
    D.deptno, 
    D.dname, 
    COUNT(E.empno) AS employee_count
FROM dept D
JOIN emp E ON D.deptno = E.deptno
GROUP BY D.deptno, D.dname
HAVING COUNT(E.empno) > 5;

方案2:修正你原来的子查询写法

如果你想保留子查询的思路,可以修改成下面这样,同时获取部门编号和员工数量:

SELECT 
    D.deptno,
    (SELECT COUNT(*) FROM emp E WHERE E.deptno = D.deptno) AS employee_count
FROM dept D
WHERE (SELECT COUNT(*) FROM emp E WHERE E.deptno = D.deptno) > 5;

不过这种写法的缺点是,对于每个部门都会执行两次子查询(一次在SELECT里,一次在WHERE里),当数据量较大时,性能会比方案1差很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:29:06