184. Department Highest Salary

Description

The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.

Id

Name

Salary

DepartmentId

1

Joe

70000

1

2

Jim

90000

1

3

Henry

80000

2

4

Sam

60000

2

5

Max

90000

1

The Department table holds all departments of the company.

Id

Name

1

IT

2

Sales

Write a SQL query to find employees who have the highest salary in each of the departments. For the above tables, your SQL query should return the following rows (order of rows does not matter).

Department

Employee

Salary

IT

Max

90000

IT

Jim

90000

Sales

Henry

80000

Constraints

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

Input:

{"headers": {"Employee": ["Id", "Name", "Salary", "DepartmentId"], "Department": ["Id", "Name"]}, "rows": {"Employee": [[1, "Joe", 70000, 1], [2, "Jim", 90000, 1], [3, "Henry", 80000, 2], [4, "Sam", 60000, 2], [5, "Max", 90000, 1]], "Department": [[1, "IT"], [2, "Sales"]]}}

Output:

{"headers": ["Department", "Employee", "Salary"], "values": [["IT", "Jim", 90000], ["Sales", "Henry", 80000], ["IT", "Max", 90000]]}

Explanation:

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

Solutions

# MySQL query statement

SELECT dept.Name AS 'Department', emp.Name AS 'Employee', emp.Salary
FROM Employee emp
JOIN Department dept 
ON emp.DepartmentId = dept.Id
WHERE (emp.DepartmentId, Salary) 
IN (SELECT DepartmentId, MAX(Salary) 
    FROM Employee 
    GROUP BY DepartmentId
   );

Follow up

Last updated

Was this helpful?