Hone logo
Hone
Problems

Employees Earning More Than Their Managers

This challenge involves analyzing employee data to identify individuals whose salaries exceed that of their direct managers. This is a common scenario in HR and compensation analysis, aiming to ensure fair pay structures and identify potential discrepancies.

Problem Description

You are given a table of employees, where each employee has a unique id, their name, their salary, and the managerId of the employee who manages them. The managerId is the id of another employee in the same table. Employees at the top of the hierarchy will have a managerId of NULL or a special value indicating no manager.

Your task is to write a query that returns the names of all employees who earn more than their respective managers.

Key Requirements:

  • Identify employees and their managers from the provided employee data.
  • Compare the salary of each employee with the salary of their manager.
  • Return the names of employees whose salary is strictly greater than their manager's salary.

Expected Behavior:

  • The output should be a list of employee names.
  • The list should only contain names of employees satisfying the salary condition.
  • If an employee has no manager (e.g., managerId is NULL), they cannot be included in the output as there's no manager to compare their salary against.

Edge Cases:

  • Employees with no manager (managerId is NULL).
  • Duplicate salaries among employees or managers.
  • A very large number of employees.

Examples

Example 1:

Input:
Employee Table:
+----+--------+--------+-----------+
| id | name   | salary | managerId |
+----+--------+--------+-----------+
| 1  | Joe    | 70000  | NULL      |
| 2  | Henry  | 80000  | 1         |
| 3  | Sam    | 60000  | 2         |
| 4  | Max    | 90000  | 1         |
| 5  | Alice  | 45000  | 3         |
| 6  | Bob    | 35000  | 3         |
+----+--------+--------+-----------+

Output:
+--------+
| name   |
+--------+
| Henry  |
| Max    |
+--------+

Explanation:
- Joe (id 1) has no manager, so he's not considered.
- Henry (id 2) earns 80000, and his manager Joe (id 1) earns 70000. Henry earns more.
- Sam (id 3) earns 60000, and his manager Henry (id 2) earns 80000. Sam earns less.
- Max (id 4) earns 90000, and his manager Joe (id 1) earns 70000. Max earns more.
- Alice (id 5) earns 45000, and her manager Sam (id 3) earns 60000. Alice earns less.
- Bob (id 6) earns 35000, and his manager Sam (id 3) earns 60000. Bob earns less.
Therefore, Henry and Max are the employees earning more than their managers.

Example 2:

Input:
Employee Table:
+----+--------+--------+-----------+
| id | name   | salary | managerId |
+----+--------+--------+-----------+
| 1  | John   | 50000  | NULL      |
| 2  | Jane   | 60000  | 1         |
| 3  | Peter  | 55000  | 2         |
+----+--------+--------+-----------+

Output:
+--------+
| name   |
+--------+
| Jane   |
+--------+

Explanation:
- John has no manager.
- Jane (id 2) earns 60000, her manager John (id 1) earns 50000. Jane earns more.
- Peter (id 3) earns 55000, his manager Jane (id 2) earns 60000. Peter earns less.

Constraints

  • The Employee table will have at least 1 row and at most 1000 rows.
  • The id column will be unique for each employee.
  • The name column will not be empty.
  • The salary column will be between 1 and 100000.
  • The managerId can be NULL or an integer.
  • If managerId is not NULL, it will refer to a valid id in the Employee table.
  • Performance: The solution should be efficient and handle a large number of employees within reasonable time limits.

Notes

  • You will likely need to join the Employee table with itself to compare employee salaries with their manager's salaries.
  • Consider how to handle the managerId being NULL.
  • The comparison is strictly greater than (>), not greater than or equal to (>=).
Loading editor...
plaintext