分散: VARP, VAR
分散とは、データの平均値から見た「ばらつき具合」を数値で表したもので、数学などでは統計学や確率論にて用いられる手法の1つです。
指定したデータが、全てであるデータの値がとる分散(variance) が欲しい場合、VARP 関数を使います。
指定したデータが、全体の内の「標本」(抜き出した一部分)として考え、そのデータの値がとる標本分散 (sample variance) が欲しい場合、VAR 関数を使います。
VARPの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータの数で割る
VARの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータ-1の数で割る(*日本工業規格)
以上となりますが・・・
「分散」という言葉自体をあまり聞いたことのない方にとっては、何を言っているのか、非常に難しい説明と感じることでしょう。
わかりづらいと感じた方は、次のように覚えてください。
「計算された数値が、小さいほどデータのばらつきが少ない」
という意味で、つまり、出てきた数値が「0」に近いほどばらつきの無いデータということが分かる手法になります。
VARP
構文:VARP( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
DISTINCT 重複する値は 1 つだけ有効データとします。
expression 整数式です。 集計関数とサブクエリは使用できません。
戻り値の型は、float です。
下のSQL例文を載せておきます。
declare @tbl1 table(c_point int) insert into @tbl1 (c_point) values (30) insert into @tbl1 (c_point) values (40) insert into @tbl1 (c_point) values (4) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (60) --insert into @tbl1 (c_point) values (NULL) insert into @tbl1 (c_point) values (80) --ALL --NULLはカウントされません select VARP(c_point) as VARP from @tbl1 --DISTINCT --60が重複しているので結果が異なります select VARP(DISTINCT c_point) as VARP_DISTINCT from @tbl1 -- VARP(c_point)を検証 --平均値を算出する declare @avg float select @avg=AVG(cast(c_point as float)) from @tbl1 --各データと平均値の差を求める declare @tbl2 table(c_point float) insert into @tbl2 select c_point-@avg from @tbl1 --各差を2乗して update @tbl2 set c_point=c_point*c_point --2乗した全ての求めた数値を足す declare @sum float select @sum=sum(c_point) from @tbl2 --最後にデータの数で割る select @sum/count(c_point) as [VARP(c_point)検証値] from @tbl2
VAR
構文:VAR( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
DISTINCT 重複する値は 1 つだけ有効データとします。
expression 整数式です。 集計関数とサブクエリは使用できません。
戻り値の型は、float です。
下のSQL例文を載せておきます。
declare @tbl1 table(c_point int) insert into @tbl1 (c_point) values (30) insert into @tbl1 (c_point) values (40) insert into @tbl1 (c_point) values (4) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (80) --ALL --NULLはカウントされません select VAR(c_point) as VARP from @tbl1 --DISTINCT --60が重複しているので結果が異なります select VAR(DISTINCT c_point) as VARP_DISTINCT from @tbl1 -- VAR(c_point)を検証 --平均値を算出する declare @avg float select @avg=AVG(cast(c_point as float)) from @tbl1 --各データと平均値の差を求める declare @tbl2 table(c_point float) insert into @tbl2 select c_point-@avg from @tbl1 --各差を2乗して update @tbl2 set c_point=c_point*c_point --2乗した全ての求めた数値を足す declare @sum float select @sum=sum(c_point) from @tbl2 --最後にデータの数で割る --各観測値の平均値からの偏差の二乗の和を観測個数から1を引いた数で割ったばらつきの尺度 select @sum/(count(c_point)-1) as [VAR(c_point)検証値] from @tbl2
以上、SQL Server VAR, VARP 分散関数でした。