185. Department Top Three Salaries

Description

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

Id

Name

Salary

DepartmentId

1

Joe

85000

1

2

Henry

80000

2

3

Sam

60000

2

4

Max

90000

1

5

Janet

69000

1

6

Randy

85000

1

7

Will

70000

1

The Department table holds all departments of the company.

Id

Name

1

IT

2

Sales

Write a SQL query to find employees who earn the top three salaries in each of the department. 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

Randy

85000

IT

Joe

85000

IT

Will

70000

Sales

Henry

80000

Sales

Sam

60000

Constraints

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

Input:

{"headers": {"Employee": ["Id", "Name", "Salary", "DepartmentId"], "Department": ["Id", "Name"]}, "rows": {"Employee": [[1, "Joe", 85000, 1], [2, "Henry", 80000, 2], [3, "Sam", 60000, 2], [4, "Max", 90000, 1], [5, "Janet", 69000, 1], [6, "Randy", 85000, 1], [7, "Will", 70000, 1]], "Department": [[1, "IT"], [2, "Sales"]]}}

Output:

{"headers": ["Department", "Employee", "Salary"], "values": [["IT", "Joe", 85000], ["Sales", "Henry", 80000], ["Sales", "Sam", 60000], ["IT", "Max", 90000], ["IT", "Randy", 85000], ["IT", "Will", 70000]]}

Explanation:

In IT department, Max earns the highest salary, both Randy and Joe earn the second highest salary, and Will earns the third highest salary. There are only two employees in the Sales department, Henry earns the highest salary while Sam earns the second highest salary.

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 3 > (SELECT COUNT(DISTINCT emp2.Salary)
            FROM Employee emp2
            WHERE emp2.Salary > emp.Salary 
                        AND emp.DepartmentId = emp2.DepartmentId);

Follow up

Last updated

Was this helpful?