SQLにてとある項目の平均値を求める際に、
期待通りに結果を得ることができなかったので
avgの使い方と合わせて対策した方法をご紹介します。
本記事では手軽に使用することができる「SQLite」を例として説明していますが
基本的にどの環境でも考え方は同じはずなので参考にしていただければと思います。
同じようにSQLiteを使って試してみたい!
という方がいれば下記記事にてインストール手順をご紹介していますので
よければご覧ください。
おすすめ記事
【mac版】DB Browser for SQLiteのダウンロード&インストール
- SQLでの平均値(avg)の求め方がわかる
目次
AVG関数の基本構文
AVG関数は指定した項目の平均値(アベレージ)を結果として返却します。
基本的な構文は次の通りです。
SELECT AVG([フィールド名]) FROM [テーブル名];
上記のSQLで指定したフィールドの平均値を求めることが可能です。
しかしこのままでは平均した結果のみが出力されてしまうので、
サンプルデータを使ってもう少し実践に近い形で確認してみます。
サンプルデータでの動作確認
さっそくサンプルデータで確認してみましょう。
本記事では「DB Browser for SQLite」を使用します。
サンプルデータについても添付しておくので、必要であればダウンロードしてお使いください。
グループごとに平均値を検索
添付したサンプルデータを読み込むと以下画像のデータが入っています。
テストの点数を記録したもので、生徒3人のテスト結果を保存しています。
まずは基本構文に従い「科目ごと」の平均値を求めてみましょう。
使用するSQLは以下です。
1 2 3 |
select subject, avg(result) from examrslt group by subject; |
日本語にすると次のような感じ。
1 2 3 |
科目(subject)と点数の平均値(avg(result))を検索して 「examrslt」テーブルから 科目(subject)ごとにまとめて(group by) |
DB Browser for SQLiteでSQLってどうやって実行するの?
というかたは以下記事を参考にしてみてください。
SQLの実行方法
【DB Browser for SQLite】SQLの実行方法とカラムの直接編集方法
SQLを実行すると次のような結果が得られます。
科目ごとに点数を集計して平均値を出力していることがわかります。
応用編(名前と桁数の指定)
応用編としてもう少しみやすい形で出力してみます。
以下のSQLを実行してみてください。
1 2 3 |
select subject as "科目", round(avg(result),1) as "平均点" from examrslt group by subject; |
ポイントは2点。
- select対象のフィールドに名前を指定「[フィールド名] as “表示名”」
- 平均点を「round関数」で小数点1桁指定
結果をみると、フィールド名が日本語になり
平均値の結果も小数点が一桁になっていることがわかります。
AVG関数使用時の注意点
上記の結果をみて違和感を覚えた方がいるかもしれません。
英語の平均点は「71.5点」となっていますが、これは「田中」と「佐藤」の平均点です。
実は集計対象が「null」の場合、対象から除外されてしまうことにより発生します。
つまり「鈴木」の点数が入っていなかったため対象外となってしまいました。
sumなどの合計値を求めるだけであれば問題ありませんが、
平均値を求める際に母数が変わってしまっては結果に影響がでてしまいます。
「そもそもnullを許すなよ!!」という正論は置いておいて
nullが含まれている場合の対処法を記載しておきます。
集計対象にnullが含まれている場合
ではnullが含まれていた場合の対処法の紹介です。
今回は「テストで0点のときは値は入力しない(null)」であるとしましょう。
つまり「nullであったときには代わりに0としてカウントする」ようにします。
これを実現するには「ifnull関数」を使用します。
ifnull関数でnull判定をしてnullであれば”0″としてカウントしてくれます!
以下のSQLを実行してみてください。
1 2 3 |
select subject, round(avg(ifnull(result, '0')),1) from examrslt group by subject; |
英語の平均点が下がり、nullだった部分が0として計算対象となったことがわかります。
まとめ
いかがでしたでしょうか。
実際の業務などでは今回紹介したAVG関数に限らず、
COUNT関数で数を数えるときなどもnullを意識することが必要となる場合があります。
加えてフィールド名の変更や表示桁数の指定も
知っていると後で検証する際や説明するときにも役立つはずなので
ぜひ覚えて帰ってください!!
最後までご覧いただきありがとうございましたm(_ _)m
おすすめ記事
【mac版】DB Browser for SQLiteのダウンロード&インストール
【DB Browser for SQLite】データベースの新規作成方法を丁寧に解説
【DB Browser for SQLite】SQLの実行方法とカラムの直接編集方法
コメントを残す