题目来源:
leetcode题目,网址:1789. 员工的直属部门 - 力扣(LeetCode)
解题思路:
首先根据 employee_id 对表 employee 进行分组聚合,然后取 employee_id 和 组内 primary_flag (Y 比 N 大) 作为新表 a 的列,然后将 a 连接 employee 表找出对应的 department_id。
解题代码:
# Write your MySQL query statement below
select b.employee_id,b.department_id
from (
select employee_id,max(primary_flag) as primary_flag
from Employee
group by employee_id
)as a inner join Employee as b on a.employee_id=b.employee_id and a.primary_flag=b.primary_flag;
总结:
这题解的时候碰到了许多问题,并且都没有解决,因此用了这个取巧的方法。
问题一:分组排序后如何根据不同条件将不同行作为第一行输出
问题二:分组聚合后如何筛选组内数据
该题无官方题解,题解区主要有两种解法。第一种是 分情况(只属于一个部门的,属于多个部门的)查找后使用 union 合并表。第二种是先利用 count(*) over(partition by employee_id) 在原有的基础上增加一列表示 当前员工属于几个部门,再在此基础上筛选。