Розуміння задачі
Дано таблицю з даними співробітників, потрібно визначити співробітників, чії зарплати входять до топ-10% серед усіх зарплат.
Приклад таблиці: Salary
Найпростіший і найефективніший спосіб знайти співробітників з зарплатами, що належать до топ-10%, — це використати CTE для віконної функції PERCENT_RANK().
Дозвольте пояснити це більш детально.
PERCENT_RANK():
- Обчислює відносний ранг зарплати кожного співробітника в наборі даних. (Наприклад: 0.1, 0.2 і т.д.)
- Ранги варіюються від 0 (найнижча зарплата) до 1 (найвища зарплата).
ORDER BY salary DESC
:
- Забезпечує, що найвищі зарплати будуть оцінені першими.
Фільтрація за допомогою percent_rank <= 0.1
:
- Вибирає співробітників, чії зарплати входять до топ-10% в наборі даних.
Розповсюджені варіанти цього запитання
Топ-10% в кожному відділі:
- Додайте
PARTITION BY department
доOVER
віконної функції.
Співробітники з найнижчими 10% зарплатами:
- Змініть
ORDER BY salary DESC
наORDER BY salary ASC
у віконній функції.
Спробуйте виконати ці запити на своїх даних і не пропустіть наступне SQL запитання 9/30 завтра!
Перекладено з: SQL Interview Question 8/30: Finding the Top 10% Salaried Employees