Функция stddev в plsql дает мне неправильное значение - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно вычислить функцию stddev в plsql, но когда я сравнил значения с Java-программой, она отличается.

Мне нужно получить функцию stddev для этого набора значений (100,104,105,103,110,115,130,95,91,105,106,101,65,91,95), когда я использовал plsql, значение: 14,032, а с использованием Java - 13,557.Не могли бы вы помочь в получении правильного значения с помощью оракула PLSQL

Ответы [ 2 ]

0 голосов
/ 07 августа 2019

Отличный код там @APC - мне нравится просматривать природу кода:)

Итак, я столкнулся с этой же проблемой сегодня, и ответ на этот вопрос состоит в том, что Oracle имеет две встроенные функции для стандартного отклонения в соответствии сдва различных вычисления:

a) stddev - для выборки со стандартным отклонением;и

b) стандартное отклонение stddev_pop

select stddev(column_value),  stddev_pop(column_value)
from table (sys.odcinumberlist(100,104,105,103,110,115,130,95,91,105,106,101,65,91,95))

Пример

STDDEV(COLUMN_VALUE) STDDEV_POP(COLUMN_VALUE)
-------------------- ------------------------
          14.0329544               13.5571219

Поэтому используйте тот, который соответствует вашим потребностям ...

Некоторыеинформация о стандартных отклонениях и какой из них использовать здесь .

0 голосов
/ 24 сентября 2018

Вот явный запрос SQL, который берет ваши числа и проходит их через вычисление стандартного отклонения .

with t23 as (
   select column_value as val 
   from table (sys.odcinumberlist(100,104,105,103,110,115,130,95,91,105,106,101,65,91,95))
)
, mn as (
select avg(val) as avg_val 
       , count(*) as cnt
from t23
) , inp as (
select t23.val  
       , t23.val  - mn.avg_val  as diff
       , power(t23.val  - mn.avg_val , 2) diff_sq
       , mn.cnt
from t23 cross join mn
) 
select sum(diff_sq) as sum_diff_sq
       , sqrt( sum(diff_sq)    /  (cnt-1) ) as sd
from inp
group by cnt
;    

Значение SD равно 14.0329544118054, что указывает на Oracle stddev() функция правильная, а то, что вы используете в Java, неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...