一、数据
570. 至少有5名直接下属的经理
Employee表:
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | department | varchar | | managerId | int | +-------------+---------+
id 是此表的主键(具有唯一值的列)。 该表的每一行表示雇员的名字、他们的部门和他们的经理的id。 如果managerId为空,则该员工没有经理。 没有员工会成为自己的管理者。
二、目标
找到符合条件的经理的名字。
三、分析
因为当managerId为空时,则该员工为经理,managerId不为空时,managerId就是该员工经理的id,所以可以通过自连接将经理id和为该经理的员工id联合起来,再通过分组函数、count函数对每个经理的员工进行计数,最后通过HAVING语句进行筛选出至少有5名直接下属的经理。
四、代码
select e1.name as name
from Employee e1
join Employee e2
on e1.id = e2.managerid -- 将经理id和为该经理的员工id联合起来
group by e1.id,e1.name -- 对经理进行分组
having count(e1.id) >= 5; -- 筛选出至少有5名直接下属的经理
五、小结
主要考察自连接语法的使用。