-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathDepartmentTop3Salaries.sql
More file actions
94 lines (83 loc) · 3.26 KB
/
DepartmentTop3Salaries.sql
File metadata and controls
94 lines (83 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
-- Table: Employee
-- +--------------+---------+
-- | Column Name | Type |
-- +--------------+---------+
-- | id | int |
-- | name | varchar |
-- | salary | int |
-- | departmentId | int |
-- +--------------+---------+
-- id is the primary key (column with unique values) for this table.
-- departmentId is a foreign key (reference column) of the ID from the Department table.
-- Each row of this table indicates the ID, name, and salary of an employee. It also contains the ID of their department.
-- Table: Department
-- +-------------+---------+
-- | Column Name | Type |
-- +-------------+---------+
-- | id | int |
-- | name | varchar |
-- +-------------+---------+
-- id is the primary key (column with unique values) for this table.
-- Each row of this table indicates the ID of a department and its name.
-- A company's executives are interested in seeing who earns the most money in each of the company's departments. A high earner in a department is an employee who has a salary in the top three unique salaries for that department.
-- Write a solution to find the employees who are high earners in each of the departments.
-- Return the result table in any order.
-- The result format is in the following example.
-- Example 1:
-- Input:
-- Employee table:
-- +----+-------+--------+--------------+
-- | 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 |
-- +----+-------+--------+--------------+
-- Department table:
-- +----+-------+
-- | id | name |
-- +----+-------+
-- | 1 | IT |
-- | 2 | Sales |
-- +----+-------+
-- Output:
-- +------------+----------+--------+
-- | Department | Employee | Salary |
-- +------------+----------+--------+
-- | IT | Max | 90000 |
-- | IT | Joe | 85000 |
-- | IT | Randy | 85000 |
-- | IT | Will | 70000 |
-- | Sales | Henry | 80000 |
-- | Sales | Sam | 60000 |
-- +------------+----------+--------+
-- Explanation:
-- In the IT department:
-- - Max earns the highest unique salary
-- - Both Randy and Joe earn the second-highest unique salary
-- - Will earns the third-highest unique salary
-- In the Sales department:
-- - Henry earns the highest salary
-- - Sam earns the second-highest salary
-- - There is no third-highest salary as there are only two employees
-- Write your PostgreSQL query statement below
-- Solution
with rank_salaries_each_dep as (
select employee.id as emp_id,
employee.name as emp_name,
department.id as dep_id,
department.name as dep_name,
employee.salary as employee_salary,
dense_rank() over (partition by department.id,department.name
order by employee.salary desc) rank
from department inner join employee
on department.id = employee.departmentId
)
select dep_name as Department,
emp_name as Employee,
employee_salary as Salary
from rank_salaries_each_dep where rank in (1,2,3);