Перейти к содержимому
Последнее обновление

CUME_DIST

Описание​

CUME_DIST (кумулятивное распределение) — оконная функция, которая вычисляет относительный ранг значения текущей строки в отсортированном наборе результатов. Она возвращает значение кумулятивного распределения для текущей строки в наборе результатов в диапазоне от 0 до 1. Для заданной строки это значение равно: (число строк со значением, меньшим или равным значению текущей строки) / (общее число строк в разделе окна).

Синтаксис​

CUME_DIST()

Возвращаемое значение​

Возвращает значение типа DOUBLE в диапазоне от 0 до 1.

Примеры​

Предположим, у нас есть таблица sales с данными о продажах, включая имя продавца (sales_person), сумму продаж (sales_amount) и дату продажи (sales_date). Мы хотим вычислить накопленный процент для суммы продаж каждого продавца за каждую дату.

SELECT 
sales_person,
sales_date,
sales_amount,
CUME_DIST() OVER (PARTITION BY sales_date ORDER BY sales_amount ASC) AS cumulative_sales_percentage
FROM
sales;

Предположим, таблица sales содержит следующие данные:

+------+--------------+------------+--------------+
| id | sales_person | sales_date | sales_amount |
+------+--------------+------------+--------------+
| 1 | Alice | 2024-02-01 | 2000 |
| 2 | Bob | 2024-02-01 | 1500 |
| 3 | Alice | 2024-02-02 | 1800 |
| 4 | Bob | 2024-02-02 | 1200 |
| 5 | Alice | 2024-02-03 | 2200 |
| 6 | Bob | 2024-02-03 | 1900 |
| 7 | Tom | 2024-02-03 | 2000 |
| 8 | Jerry | 2024-02-03 | 2000 |
+------+--------------+------------+--------------+

После выполнения приведённого выше SQL-запроса результат покажет сумму продаж каждого продавца и её накопленный процентный ранг за каждую дату:

+--------------+------------+--------------+-----------------------------+
| sales_person | sales_date | sales_amount | cumulative_sales_percentage |
+--------------+------------+--------------+-----------------------------+
| Bob | 2024-02-01 | 1500 | 0.5 |
| Alice | 2024-02-01 | 2000 | 1 |
| Bob | 2024-02-02 | 1200 | 0.5 |
| Alice | 2024-02-02 | 1800 | 1 |
| Bob | 2024-02-03 | 1900 | 0.25 |
| Tom | 2024-02-03 | 2000 | 0.75 |
| Jerry | 2024-02-03 | 2000 | 0.75 |
| Alice | 2024-02-03 | 2200 | 1 |
+--------------+------------+--------------+-----------------------------+

В этом примере функция CUME_DIST() сортирует суммы продаж в пределах каждой даты, а затем вычисляет накопленный процент для суммы продаж каждого продавца за эту дату. Поскольку мы использовали PARTITION BY sales_date, вычисления выполняются отдельно для каждой даты, а суммы продаж продавцов за разные даты обрабатываются независимо.