Employee 表包含所有员工和他们的经理。每个员工都有一个 Id,并且还有一列是经理的 Id。
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 |
请编写一个SQL查询来查找至少有5名直接下属的经理
这题看起来好想思路但是写的时候不知道怎么排版,这里记下来几种想法
思路一
- 对经理编号分组,找出经理编号有大于五个相同的编号
- 用in来对应这个id
SELECT Name
FROM Employee
WHERE Id IN
(
SELECT ManagerId
FROM Employee
GROUP BY ManagerId
HAVING COUNT(ManagerId) >= 5
)
思路二
第二种思路和我没写出来的比较像了。。。
- 两张表联结
- 其中在一个表中直接过滤条件大于等于5
SELECT Name
FROM Employee AS t1
JOIN
(
SELECT ManagerId
FROM Employee
GROUP BY ManagerId
HAVING COUNT(ManagerId) >= 5
) AS t2
ON t1.Id = t2.ManagerId