指定したカラムに含まれる値の平均を取得(avg関数)

avg 関数を使うと指定したカラムに含まれる値の平均を取得することができます。ここでは SQLite における avg 関数の使い方について解説します。

(Last modified: )

avg関数の使い方

avg 関数は値の平均を取得するために使用します。書式は次の通りです。

avg(カラム名)

引数に指定したカラムに含まれている値の中で NULL 以外の値の平均を返します。もし対象のカラムの値が NULL だけだった場合は、 avg 関数は NULL を返します。 GROUP BY句 が使われている場合はグループ毎に平均が計算されます。

なお対象のカラムに文字列などが含まれていた場合に数値に変換できない文字列は 0 として計算します。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table user(name text, point integer, gender text);

avg関数の使い方(1)

INSERT 文を使って次のようなデータを格納してあります。

insert into user values('Yamada', 72, 'Man');
insert into user values('Suzuki', 94, 'Woman');
insert into user values('Honda', 58, 'Woman');
insert into user values('Nishi', 82, 'Man');

avg関数の使い方(2)

それでは avg 関数を使って point カラムの値の平均を取得してみます。

select avg(point) from user;

avg関数の使い方(3)

カラムに入っている値の平均は (72+94+58+82)÷4=76.5 を取得することができました。

次に gender カラム毎にグループ化して行数を取得してみます。

select gender, avg(point) from user group by gender;

avg関数の使い方(4)

GROUP BY 句を使ってグループ化した場合には、グループ単位で平均を計算します。 man については (72+82)÷2=77 、 woman については (94+58)÷2=76 をそれぞれ取得することができました。( Group By 句については「データをグループ化して合計や平均を計算(GROUP BY句, HAVING句)」を参照してください)。

平均を計算するカラムにNULLおよび文字列が含まれていた場合

対象となるカラムに NULL が含まれていた場合、そのデータは除外して計算が行われます。例えば次のデータを追加します。

insert into user values('Togawa', NULL, 'Man');

平均を計算するカラムにNULLおよび文字列が含まれていた場合(1)

それでは avg 関数を使って point カラムの値の平均を取得してみます。

select avg(point) from user;

平均を計算するカラムにNULLおよび文字列が含まれていた場合(2)

NULL が入っているデータは除外されるので平均は (72+94+58+82)÷4=76.5 となります。

次に対象となるカラムに数値に変換できない文字列が含まれていた場合、値は 0 として計算されます。例えば次のデータを追加します。

insert into user values('Furuta', 'NODATA', 'Woman');

平均を計算するカラムにNULLおよび文字列が含まれていた場合(3)

それでは avg 関数を使って point カラムの値の平均を取得してみます。

select avg(point) from user;

平均を計算するカラムにNULLおよび文字列が含まれていた場合(4)

数値に変換できない文字列が入っているデータは 0 として計算されるので平均は (72+94+58+82+0)÷5=61.2 となります。除外されるのではなく 0 として計算されるために平均が下がる点に注意していください。

-- --

avg 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。