Employees Whose Manager Left the Company
EasyUpdated: Jul 7, 2025
Practice on:
Problem
Table: Employees
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| employee_id | int |
| name | varchar |
| manager_id | int |
| salary | int |
+-------------+----------+
In SQL, employee_id is the primary key for this table.
This table contains information about the employees, their salary, and the ID of their manager. Some employees do not have a manager (manager_id is null).
Find the IDs of the employees whose salary is strictly less than $30000 and whose manager left the company. When a manager leaves the company, their information is deleted from the Employees table, but the reports still have their manager_id set to the manager that left.
Return the result table ordered by employee_id.
The result format is in the following example.
Examples
Example 1
Input:
Employees table:
+-------------+-----------+------------+--------+
| employee_id | name | manager_id | salary |
+-------------+-----------+------------+--------+
| 3 | Mila | 9 | 60301 |
| 12 | Antonella | null | 31000 |
| 13 | Emery | null | 67084 |
| 1 | Kalel | 11 | 21241 |
| 9 | Mikaela | null | 50937 |
| 11 | Joziah | 6 | 28485 |
+-------------+-----------+------------+--------+
Output:
+-------------+
| employee_id |
+-------------+
| 11 |
+-------------+
Explanation:
The employees with a salary less than $30000 are 1 (Kalel) and 11 (Joziah).
Kalel's manager is employee 11, who is still in the company (Joziah).
Joziah's manager is employee 6, who left the company because there is no row for employee 6 as it was deleted.
Solution
Method 1 – Self Join and Null Check (SQL, Pandas)
Intuition
To find employees whose manager left, look for employees whose manager_id does not exist in the employee_id column. Combine this with the salary condition.
Approach
- Select employees with
salary < 30000. - For each, check if their
manager_idis not present in theemployee_idcolumn (i.e., manager left). - Return their
employee_idordered ascending.
Code
MySQL
SELECT employee_id
FROM Employees e
WHERE salary < 30000
AND manager_id IS NOT NULL
AND manager_id NOT IN (SELECT employee_id FROM Employees)
ORDER BY employee_id;
PostgreSQL
SELECT employee_id
FROM Employees e
WHERE salary < 30000
AND manager_id IS NOT NULL
AND manager_id NOT IN (SELECT employee_id FROM Employees)
ORDER BY employee_id;
Python (Pandas)
import pandas as pd
def employees_whose_manager_left(employees: pd.DataFrame) -> pd.DataFrame:
ids = set(employees['employee_id'])
res = employees[(employees['salary'] < 30000) &
(employees['manager_id'].notnull()) &
(~employees['manager_id'].isin(ids))][['employee_id']]
return res.sort_values('employee_id')
Complexity
- ⏰ Time complexity:
O(n)wherenis the number of employees. - 🧺 Space complexity:
O(n)for storing employee ids.