如何查询仅在2月(Feb)存在工作记录的员工?
查询仅在2月有工作记录的员工实现方案
基础信息
现有员工工作记录表包含emp_id(员工id)和month(工作月份)两个字段,样例数据如下:
emp_id | month |
|---|---|
| 1 | Jan |
| 1 | Feb |
| 2 | Jan |
| 2 | Feb |
| 3 | Feb |
需求为查询仅在Feb(2月)有工作记录的员工,预期输出结果为3 Feb。
实现方法
方法1:分组聚合筛选(通用写法,兼容性强)
SELECT emp_id, 'Feb' AS month FROM employee_records GROUP BY emp_id HAVING COUNT(DISTINCT month) = 1 AND MAX(month) = 'Feb';
逻辑说明:按员工id分组后,仅保留满足两个条件的分组:该员工的所有工作记录仅有1个不同月份,且这个唯一的月份是2月。
方法2:NOT EXISTS 关联筛选
SELECT DISTINCT emp_id, month FROM employee_records t1 WHERE t1.month = 'Feb' AND NOT EXISTS ( SELECT 1 FROM employee_records t2 WHERE t2.emp_id = t1.emp_id AND t2.month != 'Feb' );
逻辑说明:先筛选出所有2月有工作记录的员工,再排除其中存在其他月份工作记录的员工,剩余结果即符合要求。
内容的提问来源于stack exchange,提问作者Giri Dharan
相关产品推荐
相关产品推荐

