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

CUME_DIST

Показує частку рядків, що стоять перед поточним або рівні з ним, — від 0 до 1.

Синтаксис

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

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

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

employees

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

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

Частка за зарплатою
SELECT name, salary,
CUME_DIST() OVER (ORDER BY salary) AS cume_dist
FROM employees;
namesalarycume_dist
Noah9500.2
Liam10000.4
Emma12000.8
Sophia12000.8
Olivia13501
У відсотках
SELECT name, salary,
ROUND(CUME_DIST() OVER (ORDER BY salary) * 100) AS at_most_percent
FROM employees;
namesalaryat_most_percent
Noah95020
Liam100040
Emma120080
Sophia120080
Olivia1350100

80 % людей заробляють стільки ж, скільки Emma, або менше.

PERCENT_RANK і CUME_DIST поруч
SELECT name, salary,
PERCENT_RANK() OVER (ORDER BY salary) AS percent_rank,
CUME_DIST() OVER (ORDER BY salary) AS cume_dist
FROM employees;
namesalarypercent_rankcume_dist
Noah95000.2
Liam10000.250.4
Emma12000.50.8
Sophia12000.50.8
Olivia135011

Зверни увагу

Рівні значення отримують однаковий результат і рахуються всі разом: у Emma й Sophia по 0.8, бо до 1200 включно — четверо з п'яти.

Нуля не буває навіть для найменшого значення. Потрібно, щоб перший мав 0, — бери PERCENT_RANK.

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

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