AVG 平均
SQL Server の対象データの平均値の求めるときに、AVG関数を使います。
平均値はいろいろなデータ分析で使用されるので良く使う指標だと思います。
構文: AVG ( [ ALL | DISTINCT ] expression )
引数: ALL すべての値に集計関数が適用されます。 ALL が既定値です。
DISTINCT 一意な値の合計を返すことを指定します。
expression 定数、列、関数、および算術演算子、ビット演算子、文字列演算子の組み合わせを指定します。
NULL 値はすべて無視されます。(対象データになりません)
下のSQL例文を載せておきます。
declare @tbl1 table(a_class varchar(3), b_kbn char(1), c_point int) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','1',80) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','2',60) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','3',40) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','4',30) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','5',50) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','6',60) insert into @tbl1 (a_class,b_kbn,c_point) values ('001','7',22) --ALL select AVG(ALL c_point) from @tbl1 select AVG(c_point) from @tbl1 --ALLが無くても同じ結果 --DISTINCT --60が2行あるため、重複を省き計算される select AVG(DISTINCT c_point) from @tbl1 --expression --型変換、小数点以下も求める select AVG(cast(c_point as float)) from @tbl1 --float型に select AVG(cast(c_point as decimal(5,2))) from @tbl1 select cast(AVG(cast(c_point as decimal(5,2))) as decimal(5,2)) from @tbl1
もう一例
over や group by 句で括って結果を求める
declare @tbl1 table(a_class varchar(5), b_stdNo char(1), c_point int) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','1',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','2',70) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','3',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','4',20) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','5',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','6',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('国語','7',20) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','1',70) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','2',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','3',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','4',80) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','5',30) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','6',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('算数','7',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','1',90) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','2',70) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','3',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','4',70) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','5',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','6',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('理科','7',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','1',30) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','2',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','3',90) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','4',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','5',70) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','6',80) insert into @tbl1 (a_class,b_stdNo,c_point) values ('社会','7',30) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','1',80) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','2',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','3',40) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','4',30) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','5',50) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','6',60) insert into @tbl1 (a_class,b_stdNo,c_point) values ('英語','7',20) select avg(c_point) from @tbl1 select avg(c_point) from @tbl1 where a_class='国語' select avg(c_point) from @tbl1 where a_class='算数' select avg(c_point) from @tbl1 where a_class='理科' select avg(c_point) from @tbl1 where a_class='社会' select avg(c_point) from @tbl1 where a_class='英語' select a_class, avg(c_point) from @tbl1 group by a_class --科目ごとの平均点 select distinct b_stdNo, AVG(c_point) over (partition by b_stdNo) from @tbl1 --生徒ごとの平均点 select b_stdNo, AVG(c_point) from @tbl1 group by b_stdNo --生徒ごとの平均点
以上、SQL Server で AVG関数を使い平均値を求めるでした。