Problem Description
Table: Employee
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | salary | int | | managerId | int | +-------------+---------+ id is the primary key column for this table. Each row of this table indicates the ID of an employee, their name, salary, and the ID of their manager.
Write an SQL query to find the employees who earn more than their managers.
Return the result table in any order.
Examples
Example 1:
Input: Employee table: +----+-------+--------+-----------+ | id | name | salary | managerId | +----+-------+--------+-----------+ | 1 | Joe | 70000 | 3 | | 2 | Henry | 80000 | 4 | | 3 | Sam | 60000 | NULL | | 4 | Max | 90000 | NULL | +----+-------+--------+-----------+ Output: +----------+ | Employee | +----------+ | Joe | +----------+ Explanation: Joe is the only employee who earns more than his manager.
SQL Solution
SELECT e1.name AS Employee
FROM Employee e1
JOIN Employee e2 ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;
Alternative Solution (using subquery):
SELECT name AS Employee
FROM Employee e1
WHERE salary > (
SELECT salary
FROM Employee e2
WHERE e2.id = e1.managerId
);
Solution Explanation
This problem can be solved in two ways:
- Using JOIN:
- Self join on managerId
- Compare salaries
- Simple and readable
- Using Subquery:
- Correlated subquery
- Find manager's salary
- Compare with employee
Key points:
- Handle NULL managers
- Self-referential table
- Salary comparison
- Employee-manager relationship
Important considerations:
- JOIN vs Subquery
- Performance impact
- NULL handling
- Result formatting