文章目录
- 力扣高频SQL 50题(基础版)第三十二题
- 1789.员工的直属部门
- 题目说明
- 实现过程
- 准备数据
- 实现方式
- 结果截图
力扣高频SQL 50题(基础版)第三十二题
1789.员工的直属部门
题目说明
表:Employee
±--------------±--------+
| Column Name | Type |
±--------------±--------+
| employee_id | int |
| department_id | int |
| primary_flag | varchar |
±--------------±--------+
这张表的主键为 employee_id, department_id (具有唯一值的列的组合)
employee_id 是员工的ID
department_id 是部门的ID,表示员工与该部门有关系
primary_flag 是一个枚举类型,值分别为(‘Y’, ‘N’). 如果值为’Y’,表示该部门是员工的直属部门。 如果值是’N’,则否
一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为'N'
.
请编写解决方案,查出员工所属的直属部门。
返回结果 没有顺序要求 。
实现过程
准备数据
Create table If Not Exists Employee (employee_id int, department_id int, primary_flag ENUM('Y','N'))
Truncate table Employee
insert into Employee (employee_id, department_id, primary_flag) values ('1', '1', 'N')
insert into Employee (employee_id, department_id, primary_flag) values ('2', '1', 'Y')
insert into Employee (employee_id, department_id, primary_flag) values ('2', '2', 'N')
insert into Employee (employee_id, department_id, primary_flag) values ('3', '3', 'N')
insert into Employee (employee_id, department_id, primary_flag) values ('4', '2', 'N')
insert into Employee (employee_id, department_id, primary_flag) values ('4', '3', 'Y')
insert into Employee (employee_id, department_id, primary_flag) values ('4', '4', 'N')
实现方式
select distinct employee_id,
department_id
from Employee
where primary_flag='Y'
or employee_id in (select employee_id from Employee group by employee_id having count(department_id)=1)