Query to find 3 highest paid people in each department

create table employees(id int PRIMARY KEY, name varchar(30),salary int,department_id int);

insert into employees values(1,'ruchi',10000,2);
insert into employees values(2,'ritu',7000,2);
insert into employees values(3,'rima',7000,2);
insert into employees values(4,'koel',5000,1);
insert into employees values(5,'huma',2000,1);
insert into employees values(6,'manav',4500,1);
insert into employees values(7,'sayan',3500,1);
insert into employees values(8,'shrey',9000,2);
insert into employees values(9,'garima',1000,2);

I want to get the top 3 highest paid employees in each department.

>Solution :

You can do it using row_number() function to order your data by salary :

with cte as (
  select *, row_number() over(partition by department_id order by salary desc) as rn
  from employees
)
select id, name, salary, department_id
from cte
where rn <= 3
order by department_id, rn asc;

Demo here

Leave a Reply