essay
hot50-至少有5名直接下属的经理
#mysql
hot50——至少有5名直接下属的经理
表: 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 |
答:
select m.name
from Employee as e -- e 代表员工 (下属)
join Employee as m -- m 代表经理
on e.managerId = m.id -- 员工的经理ID = 经理的ID
group by m.id, m.name
having count(e.id) >= 5- JOIN:把“员工表”和“经理表”连起来,条件是“员工的经理ID”等于“经理的ID”。这样每一行就代表了“某经理”和“他的一个下属”。
- GROUP BY m.id:按经理分组。
- COUNT(e.id):数一下每个经理名下有多少个下属。