Описание : в этой статье вы узнаете, как использовать функцию CUME_DIST() MySQL для расчета совокупного значения распределения.
CUME_DIST() является оконной функцией, которая возвращает кумулятивное распределение величины в пределах набора значений. Она представляет количество строк со значениями, меньшими или равными значению этой строки, деленному на общее количество строк.
Возвращаемое значение функции CUME_DIST() больше нуля и меньше или равно единице (0 CUME_DIST()<<= 1). Повторяющиеся значения столбца получают одинаковое значение CUME_DIST().
Ниже показан синтаксис функции CUME_DIST():
CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ... )
В этом синтаксисе предложение PARTITION BY делит набор результатов, возвращаемый предложением FROM, на разделы, к которым применяется функция CUME_DIST().
Предложение ORDER BY определяет логический порядок строк в каждом разделе или весь набор результатов в случае, если PARTITION BY опущен. Функция CUME_DIST() вычисляет совокупную величину распределения каждой строки на основе его заказа в разделе.
Примерная формула функции CUME_DIST() выглядит следующим образом:
ROW_NUMBER() / total_rows
Давайте создадим таблицу с именем scoresс некоторыми образцами данных для демонстрации:
CREATE TABLE scores ( name VARCHAR(20) PRIMARY KEY, score INT NOT NULL ); INSERT INTO scores(name, score) VALUES ('AndreyEx',76), ('Maria',33), ('Angel',43), ('Destroyer',34), ('Master',55),
Следующее утверждение находит совокупное распределение баллов в наборе результатов:
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score) row_num, CUME_DIST() OVER (ORDER BY score) cume_dist_val FROM scores;
В этом примере оценка отсортирована в порядке возрастания от 33 до 76. Обратите внимание, что функция ROW_NUMBER() была добавлена для справки.
Так как же функция CUME_DIST() выполняет расчет?
Для первой строки функция находит количество строк в наборе результатов, значение которых меньше или равно 33. Результат равен 1. Затем функция CUME_DIST() делит 1 на общее количество строк, равное 5: 1/5. результат составляет 0,25 или 25%. Та же логика применяется ко второму ряду.
Для третьей строки функция находит количество строк со значениями, меньшими или равными 34. Существует две строки. Тогда результат функции CUME_DIST(): 2/5 = 0,5, что составляет 50%.
Та же логика расчета применяется к остальным строкам.
Из этой статьи вы узнали, как использовать функцию CUME_DIST() MySQL для вычисления кумулятивного распределения значения в наборе значений.
1/5 = 25
ок