All problems

Stars Within Their Team

hardSQLCorrelated Subqueries

Kestrel Labs has a small raise pool this year and has decided the fairest way to spend it is on people who out-earn their own team's average — the ones already carrying the higher end of their team's range.

Note carefully what that is not. Beating the company average is a different test, and it has a systematic bias: it hands the whole pool to whichever teams are paid best overall and gives the well-regarded Marketing lead nothing. Each person here has to be measured against their own team, which means the threshold is not one number but a different number for every row.

employees — one row per person. department_id is the team they sit on, given as the matching id in departments; salary is annual pay in dollars; hire_date is the day they started, written year-month-day; manager_id is the id of the person they report to, and is NULL for anyone who reports to nobody.

id name department_id salary hire_date manager_id
1 Ava Chen 1 145000 2021-03-14 NULL
2 Ben Ortiz 1 118000 2022-06-01 1
3 Cara Novak 1 121000 2023-01-10 1
4 Deshawn Lee 2 95000 2020-09-23 NULL
5 Elin Kask 2 88000 2022-11-05 4
6 Farid Amiri 3 76000 2023-04-18 NULL
7 Grace Kim 4 132000 2021-07-30 NULL
8 Hugo Silva 4 110000 2023-02-14 7
9 Ines Duarte 4 104000 2023-08-01 7
10 Jonas Weber 2 91000 2021-12-19 4

The table already exists in the database — there is nothing to create or load.

Task: Write a query returning three columns, name, department_id and salary, one row per employee paid strictly more than the average salary of their own team — equal to that average does not qualify. Order the rows by department_id ascending, and within a team by salary descending. The employee's own salary counts toward their team's average.

Example output — shape only, on invented people. A team can contribute more than one row, and inside a team the better paid comes first:

name department_id salary
Nils Ahlberg 21 168000
Mira Solberg 24 93500
Otto Brandt 24 88000

Sign in to solve this problem

Reading problems is free for everyone — solving them (Run, Submit, and tracking what you've solved) needs an account.

Sign in

Discussion

Sign in to join the discussion — reading is open to everyone.

Loading comments…