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

Database

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

参考 SELECT文

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

SELECT AVG(カラム名) FROM テーブル名;
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        |
  +----------+-----------+
*/

より実践的なサンプルコード

-- テーブルの作成
CREATE TABLE scores (
    id INT PRIMARY KEY,
    student_name VARCHAR(255),
    subject VARCHAR(255),
    score INT
);

-- データの挿入
INSERT INTO scores (id, student_name, subject, score)
VALUES (1, 'John', 'Math', 80);

INSERT INTO scores (id, student_name, subject, score)
VALUES (2, 'John', 'Science', 90);

INSERT INTO scores (id, student_name, subject, score)
VALUES (3, 'Jane', 'Math', NULL);

INSERT INTO scores (id, student_name, subject, score)
VALUES (4, 'Jane', 'Science', 85);

INSERT INTO scores (id, student_name, subject, score)
VALUES (5, 'Bob', 'Math', 70);

INSERT INTO scores (id, student_name, subject, score)
VALUES (6, 'Bob', 'Science', 75);

-- SCORE の平均を取得
SELECT AVG(score) FROM scores;

-- 結果→80

-- SCORE の平均を subject ごとに取得
SELECT subject, AVG(score)
FROM scores
GROUP BY subject;

/* 結果
subject  |          avg
---------|----------------------
Math     | 75.0000000000000000
Science  | 83.3333333333333333

GROUP BY句を使用して科目ごとにscoreの平均値を取得
この例では、MathとScienceの2つの科目ごとの平均値が表示されている

*/

参考 CREATE TABLE / INSERT

SQLを1から学習したい方は

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

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

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

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

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

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    アウトプットは「最強のインプット」である!
  2. 備忘:忘れたとしても後から見返せるように。
    未来の自分への「お手紙」を書いています。
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    あなたの知識は誰かにとっての「価値ある情報」です。

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました