570_Managers with at Least 5 Direct Reports

[medium]

The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager 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       |
+------+----------+-----------+----------+

Given the Employee table, write a SQL query that finds out managers with at least 5 direct report. For the above table, your SQL query should return:

+-------+
| Name  |
+-------+
| John  |
+-------+

Solution 1: using join

beats 33%

SELECT e2.Name
FROM Employee e1 
    JOIN Employee e2 ON e1.ManagerId = e2.Id
GROUP BY e1.ManagerId
HAVING count(e1.Id) >= 5;

Solution 2: using subquery

beats 69%

SELECT Name FROM Employee 
WHERE Id IN 
(SELECT ManagerId FROM Employee
GROUP BY ManagerId
HAVING count(Id) >= 5);

Last updated