Главная > SQL > Функция CUME_DIST


Функция CUME_DIST

Аналитический вариант

CUME_DIST( ) OVER ( [ query_partition_clause ] order_by_clause )

Функция CUME_DIST рассчитывает кумулятивное распределение значения в наборе данных. Возвращаемое значение находится в диапазоне от 0 до 1. Функция на вход принимает числовой тип данных, или тип данных, который может неявно преобразовать в числовой.


Кумулятивная функция распределения (или просто функция распределения) в теории вероятностей однозначно задаёт распределение случайной величины или случайного вектора.

Пример:

with t as
(select 1 id, 10 val  from dual
  union all
 select 2 id, 20 val  from dual
  union all
 select 3 id, 30 val  from dual
  union all
 select 4 id, 50 val  from dual
  union all
 select 5 id, 70 val  from dual
)
select  id,
        val,
        CUME_DIST()  OVER (order by val) "Cume_Dist"
from t
order by val;

        ID        VAL  Cume_Dist
---------- ---------- ----------
         1         10        0,2
         2         20        0,4
         3         30        0,6
         4         50        0,8
         5         70          1

Каким образом происходит расчёт:
1) Подсчитываем количество чисел в наборе — 5

2)  Вероятность одного числа равна 1/n, где n количество чисел;

Таким образом, закон распределения вероятностей есть функция р(х)=1/5 для любого значения х из множества {10, 20, 30,  50, 70}.

3) Математическое ожидание случайной величины определяется формулой

Подставляем наши значения

10 (1) = 1/5 = 1/5 * 1= 0.2

20 (2) = 1/5+1/5 = 1/5 * 2 = 0.4

30 (3) = 1/5+1/5+1/5  = 1/5 * 3= 0.6

50 (4) = 15/+1/5+1/5+1/5 = 1/5 * 4 =  0.8

70 (5) = 15/+1/5+1/5+1/5 +1/5 = 1/5 * 5 = 1


Агрегатный вариант



CUME_DIST(expr[,expr ]...)
   WITHIN GROUP
   (ORDER BY expr [ DESC | ASC ]
                  [ NULLS { FIRST | LAST } ]
             [, expr [ DESC | ASC ]
                     [ NULLS { FIRST | LAST } ]
             ]...
   )

Использование функции CUME_DIST как агрегатной, позволяет рассчитывать распределение переданного числа в наборе данных.

Пример

with t as
(select 1 id, 10 val  from dual
  union all
 select 2 id, 20 val  from dual
  union all
 select 3 id, 30 val  from dual
  union all
 select 5 id, 70 val  from dual
)
select CUME_DIST(50) within group (order by val ) "Cume_Dist"
from t
order by val;

 Cume_Dist
----------
       0,8

Похожие записи:

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.