【SQL】AVG関数(SELECT AVG)を1分でわかりやすく解説

Database

SELECTで指定したレコードの平均を取得するAVG関数の使い方を初心者向けにわかりやすく1から解説します。

AVG関数は指定したカラムのレコードの平均値を取得します。"AVG" は平均を意味する "Average" の略です。

SELECT AVG

このページではSQLにおけるAVG関数の利用方法・構文ルールを初心者向けにご説明します。

このページで学べる内容
  • AVG関数の使い方・構文ルール
  • GROUP BY句を利用した集計方法

プログラマーやシステムエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

SQL:AVG関数の使い方・構文ルール

SELECT AVG(カラム名) FROM テーブル名;

AVG関数はSUM関数と全く同じです。

"AVG( )" のように平均値を求めたいカラムを( )で囲むだけ。

ここでは以下のようなテーブルを例にAVG関数の利用方法と処理結果を見ていきます。

SELECT AVG

成績の一覧テーブルから、Japanaeseカラムのレコードの平均値を取得したい場合は以下のように記述します。

SELECT AVG(Japanaese) FROM PointList;

-- 結果「450」

SUM関数と同様に、複数のカラムを指定して合計値を取得することも可能です。

SELECT AVG(Japanese), AVG(Math), AVG(English)
  FROM PointList;

-- AVG(Japanese)⇒45
-- AVG(Math)    ⇒450
-- AVG(English) ⇒45

参考までにSUM関数のサンプルコードも記載しますが、構文ルールは全く同様です。

SELECT SUM(Japanese), SUM(Math), SUM(English)
  FROM PointList;

-- AVG(Japanese)⇒360
-- AVG(Math)    ⇒3600
-- AVG(English) ⇒360

SUM関数と同様にAVG関数では必ずカラムを指定する必要があります。

ワイルドカード*を使用することはできません。

SELECT AVG(*) FROM PointList;

-- AVG関数の引数には「*」を利用することはできません

AVG関数:NULL値の扱い

SUM関数と同様でAVG関数もNULL値を除外して平均値を計算してくれます。

仮に以下のようなテーブルが存在する場合にAVG関数を利用するとどうなるか?

AVG関数は、計算の前にNULLを除外しその後で合計を計算するため結果は以下のようになります。

SELECT AVG(Japanese),AVG(Math),AVG(English)
  FROM PointList;

-- AVG「10」/ AVG「100」/ AVG「10」

レコード数自体は8個あるので、10(合計)÷8(レコード数) = 1.25 と出ると誤認される方がいますが、上記でも開設した通り「NULLは計算の前に除外される」ため、計算式は以下のようになります。

10(合計)÷1(レコード数)

AVG関数:GROUP BY句との合わせ技

AVG関数は "GROUP BY" 句と併用して利用することが可能。

一般的なシステムでAVG関数が用いられる場合は "GROUP BY" 句と同時に用いられることが非常に多いため、この使い方も併せて理解しておくと良いでしょう。

先ほどのPointListテーブルに性別を示すカラムを追加して考えてみましょう。

GROUP BY句にFM列を指定して実行した結果がこちら。

SELECT FM, AVG(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | AVG       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 50        |
*/

ご覧のように、指定したグループごとに結果を取得してくれます。

男:10(合計)÷1(レコード数)=10

女:350(合計)÷7(レコード数)=50

AVG関数のまとめ
  • AVG関数は指定したカラムの平均値を取得できる
  • NULLは除外して計算される
SELECT AVG(Japanese),AVG(Math),AVG(English)
  FROM PointList;

-- AVG「10」/ AVG「100」/ AVG「10」
  • GROUP BY句と組み合わせて利用することでグループごとに合計値を取得することが可能
SELECT FM, AVG(Japanese)
  FROM PointList
 GROUP BY FM;

/* 実行結果
  +----------+-----------+
  | FM       | AVG       |
  +----------+-----------+
  | 男       | 10        |
  | 女       | 50        |
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

タイトルとURLをコピーしました