[LeetCode] 181. Employees Earning More Than Their Managers

Problem

The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.

1
2
3
4
5
6
7
8
+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+

Given the Employee table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.

1
2
3
4
5
+----------+
| Employee |
+----------+
| Joe      |
+----------+

Explanation

  1. It is a comparision problem, so we can use LEFT JOIN to relate the tables by first table’s managerId equal to second table’s id and we get the table like below. Then, we use WHERE to limit first table’s salary greater than second table’s salary.
1
2
3
4
5
6
7
8
+----+-------+--------+-----------++------+-------+--------+-----------+
| Id | Name  | Salary | ManagerId || Id   | Name  | Salary | ManagerId |
+----+-------+--------+-----------++------+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         || 3    | Sam   | 60000  | NULL      |
| 2  | Henry | 80000  | 4         || 4    | Max   | 90000  | NULL      |
| 3  | Sam   | 60000  | NULL      || NULL | NULL  | NULL   | NULL      |
| 4  | Max   | 90000  | NULL      || NULL | NULL  | NULL   | NULL      |
+----+-------+--------+-----------++------+-------+--------+-----------+

Solution

1
2
3
4
5
# Write your MySQL query statement below
SELECT e1.Name AS Employee
FROM Employee e1
LEFT JOIN Employee e2 ON e1.ManagerId = e2.Id
WHERE e1.Salary > e2.Salary AND e1.ManagerId = e2.Id;