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

SQL查询:筛选所有员工均在指定ID列表中的部门

SQL筛选全下属都在指定ID列表的部门

需求背景

现有员工部门归属表,仅包含department(部门名称)、employee(员工ID)两个字段,已知每名员工仅归属1个部门。给定一组员工ID列表,需要编写SQL筛选出所有下属员工全部包含在该给定列表内的部门。

测试样例

测试表数据如下:

DepartmentEmployee
finance1
finance2
marketing3
marketing4
IT5
IT6
  • 给定员工ID列表:(2,3,4,5,6)
  • 预期返回结果:('marketing', 'IT')
  • 判定逻辑:finance部门存在员工1不在给定列表,因此被排除;marketing、IT部门的所有员工均在给定列表内,符合要求。
  • 实现约束:不限制数据库类型,可使用标准SQL或任意数据库方言实现。

实现方案

方案1:分组聚合判断(全数据库兼容,推荐)

核心逻辑:按部门分组后,统计部门内不在给定ID列表的员工数量,数量为0即代表该部门所有员工都在列表中。假设表名为dept_emp,标准SQL写法如下:

SELECT department
FROM dept_emp
GROUP BY department
HAVING SUM(CASE WHEN employee NOT IN (2,3,4,5,6) THEN 1 ELSE 0 END) = 0;

在支持布尔值隐式转数值的数据库(MySQL、PostgreSQL等)中,可以简化写法:

SELECT department
FROM dept_emp
GROUP BY department
HAVING SUM(employee NOT IN (2,3,4,5,6)) = 0;

方案2:反选排除法

核心逻辑:先查出所有「存在员工不在给定列表」的部门,再从全量部门中排除这些部门即可:

SELECT DISTINCT department
FROM dept_emp
WHERE department NOT IN (
    SELECT department
    FROM dept_emp
    WHERE employee NOT IN (2,3,4,5,6)
);

提示:如果employee字段存在NULL值,需要提前加WHERE employee IS NOT NULL条件过滤,避免NOT IN逻辑出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:06