570. 至少有5名直接下属的经理 - 力扣(LeetCode)

代码

# Write your MySQL query statement below
select
    e1.name
from 
    Employee e1, Employee e2
where 
    e1.id = e2.managerId 
Group by 
    e1.id, e1.name
Having 
    count(e2.id) >= 5
1. SELECT e1.name
  • 我们最终想要的是经理的姓名
  • 这里的 e1 代表“可能是经理”的员工。
2. FROM Employee e1, Employee e2
  • 把 Employee 表用了两次,分别起别名:
    • e1:代表经理
    • e2:代表普通员工(下属)
  • 这种写法叫 自连接(self-join) —— 一张表和自己关联。

💡 为什么能这样?因为“经理”和“员工”其实都在同一张 Employee 表里!

3. WHERE e1.id = e2.managerId
  • 关键连接条件!
  • 意思是:e1 的 id 等于 e2 的 managerId
  • 也就是说:e1 是 e2 的经理
  • 通过这个条件,我们就把“经理”和“他的下属”配对起来了。
select
    e1.name as manager
    ,e2.name
    ,e2.department
    ,e2.managerId
from 
    Employee e1, Employee e2
where 
    e1.id = e2.managerId 





| manager | name  | department | managerId |
| ------- | ----- | ---------- | --------- |
| John    | Dan   | A          | 101       |
| John    | James | A          | 101       |
| John    | Amy   | A          | 101       |
| John    | Anne  | A          | 101       |
| John    | Ron   | B          | 101       |
4. GROUP BY e1.id, e1.name
  • 现在我们要按经理分组,统计每个经理有多少个下属。
  • 为什么同时 GROUP BY e1.id 和 e1.name
    • 虽然 id 是主键(唯一),但 SQL 标准要求:SELECT 中非聚合字段必须出现在 GROUP BY 中。
    • 所以为了安全兼容(尤其在 MySQL 严格模式下),同时写上 id 和 name
5. HAVING COUNT(e2.id) >= 5
  • COUNT(e2.id):统计每个经理对应的下属数量(即 e2 有多少行)
  • HAVING 用于对分组后的结果进行筛选
  • 只保留那些下属数量 ≥ 5 的经理

结果

解题步骤:https://www.bilibili.com/video/BV1htfDBVEDw/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值