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

如何不使用IN和子查询实现员工数超2的部门名称SQL查询?

问题:查询员工数量超过2人的部门名称(不使用IN关键字和子查询)

需求:查询员工数量超过2人的部门名称,不想使用IN关键字,且尚未学习子查询,寻求其他实现方案。

原参考答案(使用IN和子查询)

SELECT Name FROM Departments
WHERE Code IN 
( SELECT Department 
  FROM Employees
  GROUP BY Department
  HAVING COUNT(*) > 2);

存在问题的尝试写法

1. 我的尝试1

SELECT D.name             
FROM Employees AS em , Departments AS D
WHERE D.code=em.department AND
( SELECT  department , COUNT(*)  FROM Employees  GROUP BY department ) > 2

问题:子查询返回多行多列结果,无法直接与数值2做比较,语法错误;语句中FROOM为拼写错误,应为FROM。

2. 我的尝试2

SELECT  department , Count(*) 
FROM Employees 
WHERE COUNT(*)>2
GROUP BY department

问题:COUNT(*)是聚合函数,不能放在WHERE子句中做筛选——WHERE仅能筛选行级数据,聚合条件需用HAVING子句。

3. 朋友的尝试

SELECT D.Name
FROM employees E INNER JOIN Departments D
ON D.Code=E.Department 
HAVING COUNT(E.Name)>2

问题:缺少GROUP BY子句,HAVING必须配合GROUP BY使用(需明确按部门维度统计员工数量),否则数据库无法确定聚合的分组依据。

正确实现方案(不使用IN和子查询)

通过关联表后按部门分组,再用HAVING筛选员工数超2的部门:

SELECT D.Name
FROM Departments D
INNER JOIN Employees E ON D.Code = E.Department
GROUP BY D.Code, D.Name
HAVING COUNT(E.Id) > 2

说明:

  • 用INNER JOIN关联部门表与员工表,仅保留有员工的部门;
  • 按部门唯一标识D.Code和名称D.Name分组(适配多数数据库的GROUP BY规则);
  • 用COUNT(E.Id)统计部门员工数,HAVING筛选出数量大于2的部门名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:12:11