데이터베이스에 숫자 열이 있습니다. 표준 편차는 컴퓨터에서 어떻게 계산합니까? 나는 stddev 함수를 사용하고 싶지 않다.SQL에서 내장 함수없이 표준 편차를 계산하는 방법
답변
내가 궁금해서 그냥 실제 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
표준 편차는 분산의 제곱근을 n으로 나눈 것입니다.
분산은 평균값과 관측 값의 차이의 제곱의 합입니다.
그래서, 대부분의 데이터베이스에서 사용할 수있는 윈도우 함수 :
select sqrt(avg(var))
from (select square(t.x - avg(t.x) over()) as var
from t
) t;
참고 :
- 는
square()
기능 (예 :power()
같은) 다른 이름을 가질 수 있습니다. sqrt()
함수는 다른 이름을 가질 수 있습니다.- 이것은 일반적으로 표준 편차를 계산하는 좋은 방법입니다. 이 아니라입니다. 특히 이것은 수치 적으로 불안정한 알고리즘입니다 (유한 수의 정상 수에 대해서는 정상적으로 작동합니다).
- 창 함수가 집계 함수의 인수가 될 수 없으므로 부속 조회가 필요합니다.
3 가지 계산, 3 가지 결과 중력 질문 중 하나를 만듭니다. 결과 : MS> 1.88409468982299 JC> 1.88395368060299 GL> 1.88395368262047. –
@JohnCappelletti. 우리가 내장 함수의 결과를 재현 할 수 없다는 것은 놀랍다. 그 구현은 수치 적으로 안정한 방법을 사용하여 중요하지 않은 소수 자리의 작은 변동을 생성 할 수 있기를 바랍니다. –
그런 다음 표준 편차를 계산하는 데 필요한 다른 함수를 사용하십시오. 수식에 평균이 필요하다면 AVG를 사용하고 count()를 사용하면됩니다. 기본적으로 다른 집계 함수를 사용하여 std dev을 만듭니다. –
mytable – tonny
에서 SELECT SQRT (SUM ((숫자 -AVG (번호)) * (숫자 -AVG (번호))/COUNT (값)을 찾았지만 작동하지 않음 – tonny