Я использую SQL Server 2008, одним из моих требований является вычисление стандартного отклонения населения. SQL Server предоставляет встроенную функцию stdevp
. Я использую его, но меня пугает результат, который я получаю. Стандартное отклонение населения для группы одинаковых чисел должно быть равным нулю, но здесь я получаю немного отличающееся, хотя и незначительное значение.Встроенная функция SQL Server Ошибка вычисления Stdevp
drop table guest.tempTable;
create table guest.tempTable (column1 varchar , column2 decimal(10,6))
insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);
commit;
Ниже приводится STDEVP запрос:
select stdevp(column2) from guest.tempTable
group by column1
В результате я получаю
------------------------
5.459150335692846E-5
, который должен был 0,00.
В документации для stdevp
указано, что он возвращает поплавок. Поэтому я предполагаю, что это вопрос округления, но я не могу найти решение.
Спасибо за ответ, да, это вопрос округления, но я надеялся, что если бы было какое-либо решение, которое было бы известно, что бы получить правильный результат, например, если я изменю точность указанного поля (или самого типа данных) но я думаю, что все равно будет проходить одна и та же арифметика с плавающей запятой :( – rirhs
Одним из возможных решений может быть сделать это без float. Используйте десятичное или числовое значение. –
Я пытался использовать другие типы данных, но без успеха, теперь я полагаясь на вычисление stdev на прикладном уровне вместо вычисления его в слое базы данных, тогда я округляю его до приемлемого предела.Как-то stdev в java дает сравнительно точные результаты (хотя они еще не будут 0) по сравнению с SQLServer, поэтому я беру этот подход. – rirhs