Віконністандарт SQL

PERCENT_RANK

Показує відносне місце рядка від 0 до 1: яка частка інших рядків стоїть перед ним.

Синтаксис

PERCENT_RANK() OVER (ORDER BY <критерій>)
PERCENT_RANK() OVER (PARTITION BY <група> ORDER BY <критерій>)

Рахує (місце − 1) / (рядків − 1): перший у порядку отримує 0, останній — 1. Зручно, щоб сказати «заробляє більше, ніж 75 % колег». Схожа CUME_DIST рахує частку разом із поточним рядком і ніколи не дає 0.

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Відносне місце за зарплатою
SELECT name, salary,
PERCENT_RANK() OVER (ORDER BY salary) AS percent_rank
FROM employees;
namesalarypercent_rank
Noah9500
Liam10000.25
Emma12000.5
Sophia12000.5
Olivia13501
У відсотках
SELECT name, salary,
ROUND(PERCENT_RANK() OVER (ORDER BY salary) * 100) AS higher_than_percent
FROM employees;
namesalaryhigher_than_percent
Noah9500
Liam100025
Emma120050
Sophia120050
Olivia1350100

Emma й Sophia заробляють більше, ніж 50 % колег, а Olivia — більше, ніж усі інші.

У кожному відділі
SELECT name, department, salary,
PERCENT_RANK() OVER (PARTITION BY department ORDER BY salary) AS rank_in_department
FROM employees;
namedepartmentsalaryrank_in_department
Liambackend10000
Emmabackend12001
Sophiadesign12000
Noahfrontend9500
Oliviafrontend13501

У відділі з однією людиною — design — результат 0: порівнювати нема з ким.

Зверни увагу

Результат — частка від 0 до 1, а не відсотки. Відсотки — множенням на 100.

Рівні значення отримують однаковий результат, тож 0.5 можуть мати кілька людей одразу.

Для єдиного рядка результат 0: ділити нема на що.

Схожі функції

Детально в курсі