Skip to main content
Madhav
EditReport

Department Highest Salary

Description:​

Write a solution to find employees who have the highest salary in each of the departments. Return the result table in any order.

Table: Employee

Column NameType
idint
namevarchar
salaryint
departmentIdint

id is the primary key for this table.

Table: Department

Column NameType
idint
namevarchar

id is the primary key for this table.

Example 1: Input: Employee table:

idnamesalarydepartmentId
1Joe700001
2Jim900001
3Henry800002
4Sam600002
5Max900001

Department table:

idname
1IT
2Sales

Output:

DepartmentEmployeeSalary
ITJim90000
SalesHenry80000
ITMax90000

Explanation: Max and Jim both have the highest salary in the IT department and Henry has the highest salary in the Sales department.


Approaches:​

1. JOIN with a GROUP BY Subquery​

To find the highest earner, we first need to determine the maximum salary for each departmentId using a GROUP BY subquery. Then, we join the Employee and Department tables and filter the results so we only select rows where the departmentId and salary match the maximum values found in our subquery.

  • Time Complexity: O(Nlog⁑N)O(N \log N) where NN is the number of employees, due to the grouping and joining operations.
  • Space Complexity: O(D)O(D) where DD is the number of distinct departments temporarily stored during the subquery execution.

Subquery Solutions:​

MySQL / PostgreSQL

SELECT 
d.name AS Department,
e.name AS Employee,
e.salary AS Salary
FROM
Employee e
JOIN
Department d
ON
e.departmentId = d.id
JOIN (
SELECT departmentId, MAX(salary) AS max_salary
FROM Employee
GROUP BY departmentId
) m
ON
e.departmentId = m.departmentId
AND e.salary = m.max_salary;
Finished reading? Mark this topic as complete.