SQLite | SQLite関数 | avg関数で平均値を求める
avg()関数は指定したカラムの平均値を求めます。ここでは、その使い方を説明します。
avg関数の使い方
avg()で平均値を計算します。構文は次のとおりです。
avg(カラム名)
指定カラムのNULL以外を平均します。すべてNULLならNULLを返し、GROUP BYを使うとグループごとに計算します。
数値に変換できない文字列は0として扱われます。
–
例として次のテーブルを作成します。
create table user (name text, point integer, gender text);
sqlite> create table user (name text, point integer, gender text);
sqlite>
次のデータを追加します。
insert into user values ('dekuma', 72, 'Man');
insert into user values ('kimkc', 94, 'Woman');
insert into user values ('araikuma', 58, 'Woman');
insert into user values ('happykuma', 82, 'Man');
sqlite> insert into user values ('dekuma', 72, 'Man');
sqlite> insert into user values ('kimkc', 94, 'Woman');
sqlite> insert into user values ('araikuma', 58, 'Woman');
sqlite> insert into user values ('happykuma', 82, 'Man');
sqlite>
avg()でpointの平均を求めます。
select avg(point) from user;
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select avg(point) from user;
avg(point)
----------
76.5
sqlite>
平均は(72 + 94 + 58 + 82) ÷ 4 = 76.5です。
次にgenderでグループ化して平均を求めます。
select gender, avg(point) from user group by gender;
sqlite> select gender, avg(point) from user group by gender;
gender avg(point)
---------- ----------
Man 77.0
Woman 76.0
sqlite>
GROUP BYを使うとグループ単位で計算され、manは77、womanは76になります。
平均対象にNULLや文字列がある場合
NULLは計算から除外されます。次の行を追加します。
insert into user values ('raccoon', NULL, 'Man');
sqlite> insert into user values ('raccoon', NULL, 'Man');
sqlite>
sqlite> select * from user;
name point gender
---------- ---------- ----------
dekuma 72 Man
kimkc 94 Woman
araikuma 58 Woman
happykuma 82 Man
raccoon Man
sqlite>
もう一度pointの平均を求めます。
select avg(point) from user;
sqlite> select avg(point) from user;
avg(point)
----------
76.5
sqlite>
NULLは無視されるため、平均は76.5のままです。
次に、数値へ変換できない文字列を追加します。これは0として扱われます。
insert into user values ('mykuma', 'NODATA', 'Woman');
sqlite> insert into user values ('mykuma', 'NODATA', 'Woman');
sqlite>
sqlite> select * from user;
name point gender
---------- ---------- ----------
dekuma 72 Man
kimkc 94 Woman
araikuma 58 Woman
happykuma 82 Man
raccoon Man
mykuma NODATA Woman
sqlite>
avg()でpointの平均を求めます。
select avg(point) from user;
sqlite> select avg(point) from user;
avg(point)
----------
61.2
sqlite>
文字列を0として含めるため、平均は(72 + 94 + 58 + 82 + 0) ÷ 5 = 61.2です。除外されない点に注意してください。