题目
表: Employee
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | department | varchar | | managerId | int | +-------------+---------+ Id是该表的主键列。 该表的每一行都表示雇员的名字、他们的部门和他们的经理的id。 如果managerId为空,则该员工没有经理。 没有员工会成为自己的管理者。
编写一个SQL查询,查询至少有5名直接下属的经理 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Employee 表: +-----+-------+------------+-----------+ | id | name | department | managerId | +-----+-------+------------+-----------+ | 101 | John | A | None | | 102 | Dan | A | 101 | | 103 | James | A | 101 | | 104 | Amy | A | 101 | | 105 | Anne | A | 101 | | 106 | Ron | B | 101 | +-----+-------+------------+-----------+ 输出: +------+ | name | +------+ | John | +------+
解题
方法一:子查询
1.找到出现大于等于5次的 经理id
2.根据经理id去查询名字
select name from Employee where id in( select managerId as id from Employee group by managerId having count(managerId)>=5 );
方法二:联结
一定要使用inner join,因为存在它们的经理id不在这个表里面,从而导致结果是null而不是空。
select b.name from Employee as a inner join Employee as b on a.managerId=b.id group by a.managerId having count(a.managerId)>=5;