2016-10-09 5 views
-1

데이터베이스에 숫자 열이 있습니다. 표준 편차는 컴퓨터에서 어떻게 계산합니까? 나는 stddev 함수를 사용하고 싶지 않다.SQL에서 내장 함수없이 표준 편차를 계산하는 방법

+0

그런 다음 표준 편차를 계산하는 데 필요한 다른 함수를 사용하십시오. 수식에 평균이 필요하다면 AVG를 사용하고 count()를 사용하면됩니다. 기본적으로 다른 집계 함수를 사용하여 std dev을 만듭니다. –

+0

mytable – tonny

+0

에서 SELECT SQRT (SUM ((숫자 -AVG (번호)) * (숫자 -AVG (번호))/COUNT (값)을 찾았지만 작동하지 않음 – tonny

답변

0

내가 궁금해서 그냥 실제 STDEV()를 테스트하기로 결정했습니다. 이제는 내장 함수를 못 만들 수 없습니다.

내가 가까이

... 0.000141009220002264 나 또한

오프 0.00748 %로 전체 평균과 백작 (분산 소수점으로 더 컸다)

아래의 예는 후 것입니다 떠로 변환하는 내 (이 중요하지 않는 것이) 10 년 수익률에 대한 재무 등급 표

Select SQLFunction = Stdev([TR_Y10]) 
     ,ManualCalc = Sqrt(Sum(Power(((cast([TR_Y10] as float)-B.TotalAvg)),2)/B.TotalCnt)) 
     ,Variance = Stdev([TR_Y10]) - Sqrt(Sum(Power(((cast([TR_Y10] as float)-B.TotalAvg)),2)/B.TotalCnt)) 
From [Chinrus-Shared].[dbo].[DS_Treasury_Rates] 
Join (Select TotalAvg=Avg(cast([TR_Y10] as float)),TotalCnt=count(*) From [Chinrus-Shared].[dbo].[DS_Treasury_Rates]) B on 1=1 

반환

SQLFunction   ManualCalc   Variance 
1.88409468982299 1.88395368060299 0.000141009220002264 
0

표준 편차는 분산의 제곱근을 n으로 나눈 것입니다.

분산은 평균값과 관측 값의 차이의 제곱의 합입니다.

그래서, 대부분의 데이터베이스에서 사용할 수있는 윈도우 함수 :

select sqrt(avg(var)) 
from (select square(t.x - avg(t.x) over()) as var 
     from t 
    ) t; 

참고 :

  • square() 기능 (예 : power() 같은) 다른 이름을 가질 수 있습니다.
  • sqrt() 함수는 다른 이름을 가질 수 있습니다.
  • 이것은 일반적으로 표준 편차를 계산하는 좋은 방법입니다. 이 아니라입니다. 특히 이것은 수치 적으로 불안정한 알고리즘입니다 (유한 수의 정상 수에 대해서는 정상적으로 작동합니다).
  • 창 함수가 집계 함수의 인수가 될 수 없으므로 부속 조회가 필요합니다.
+0

3 가지 계산, 3 가지 결과 중력 질문 중 하나를 만듭니다. 결과 : MS> 1.88409468982299 JC> 1.88395368060299 GL> 1.88395368262047. –

+0

@JohnCappelletti. 우리가 내장 함수의 결과를 재현 할 수 없다는 것은 놀랍다. 그 구현은 수치 적으로 안정한 방법을 사용하여 중요하지 않은 소수 자리의 작은 변동을 생성 할 수 있기를 바랍니다. –

관련 문제