目录
题目
表: Employee
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | department | varchar | | managerId | int | +-------------+---------+ id 是此表的主键(具有唯一值的列)。 该表的每一行表示雇员的名字、他们的部门和他们的经理的id。 如果managerId为空,则该员工没有经理。 没有员工会成为自己的管理者。
编写一个解决方案,找出至少有五个直接下属的经理。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Employee 表: +-----+-------+------------+-----------+ | id | name | department | managerId | +-----+-------+------------+-----------+ | 101 | John | A | Null | | 102 | Dan | A | 101 | | 103 | James | A | 101 | | 104 | Amy | A | 101 | | 105 | Anne | A | 101 | | 106 | Ron | B | 101 | +-----+-------+------------+-----------+ 输出: +------+ | name | +------+ | John | +------+
分析
该表的每一行表示雇员的名字、他们的部门和他们的经理的id。没有员工会成为自己的管理者。
经理和下属均具有独立id,经理的managerId为null,下属的managerId为对应经理id
交叉连接 from Employee e1 join Employee e2
匹配 on e1.id = e2.managerId
找出至少有五个直接下属的经理
需要计数,按照经理的id分组 group by e1.id
仅需至少五个下属 having count(e2.managerId) >= 5
输出经理name
select e1.name name
代码
select e1.name name
from Employee e1 join Employee e2
on e1.id = e2.managerId
group by e1.id
having count(e2.managerId) >= 5