1789. 员工的直属部门
问题链接😊
思路分析
一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为'N'.
请编写解决方案,查出员工所属的直属部门。
返回结果 没有顺序要求 。
看示例:
输入:
Employee table:
+-------------+---------------+--------------+
| employee_id | department_id | primary_flag |
+-------------+---------------+--------------+
| 1 | 1 | N |
| 2 | 1 | Y |
| 2 | 2 | N |
| 3 | 3 | N |
| 4 | 2 | N |
| 4 | 3 | Y |
| 4 | 4 | N |
+-------------+---------------+--------------+
输出:
+-------------+---------------+
| employee_id | department_id |
+-------------+---------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 3 |
| 4 | 3 |
+-------------+---------------+
解释:
- 员工 1 的直属部门是 1
- 员工 2 的直属部门是 1
- 员工 3 的直属部门是 3
- 员工 4 的直属部门是 3
这里对于员工的直属部门有两种情况:
- 只有一条记录,且primary_flag 为N
- 有多条记录,其中一条primary_flag 为Y
这两种情况,我们可以先分开处理,最后合并调试
处理第一种情况
将数据按照employee_id,并在分组后过滤出只有一个部门的员工id和部门id
详细的sql语句如下:
SELECT employee_id,department_id
FROM Employee
GROUP BY employee_id
HAVING COUNT(*)=1;
运行之后的结果:
处理第二种情况
找出primary_flag 为Y的记录对应的部门id,这样就能筛选出部门的员工id和部门id
具体的sql语句如下:
SELECT employee_id,department_id
FROM Employee
WHERE primary_flag="Y"
;
运行之后的结果如下:
联合两种情况的数据
我们将两个语句使用union语句联合起来,获取到最终的答案,最终的解答如下:
解答
# Write your MySQL query statement below
SELECTemployee_id, department_id
FROMEmployee
GROUP BYemployee_id
HAVINGCOUNT(department_id) = 1
UNION
SELECTemployee_id, department_id
FROMEmployee
WHEREprimary_flag = 'Y' ;
总结
这个问题其实就是要求我们将筛选条件拆分,并使用UNION联合结果。