题目:1789.员工的直属部门

题目来源:

        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) 在原有的基础上增加一列表示 当前员工属于几个部门,再在此基础上筛选。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值