All problems

Above the Line

mediumSQLSubqueries

Retention planning at Kestrel Labs starts from a blunt premise: the people most expensive to replace are usually the people already paid above the middle of the company. HR wants that list — everyone earning more than the company-wide average — as the starting population for a retention review, best paid first.

The catch is that the threshold is not a number anyone can type. It is computed from the same table being filtered, and it changes the moment anyone is hired, promoted or leaves. Hard-coding today's figure produces a query that is wrong next month and never says so.

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 two columns, name and salary, one row per employee paid strictly more than the average salary across all employees — equal to the average does not qualify. Order the rows by salary, highest first; no two salaries in the result are equal.

Example output — shape only, on invented people and pay:

name salary
Nils Ahlberg 205000
Mira Solberg 163000
Otto Brandt 129500

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…