売上や成績などの「平均値」を知りたい時、SQLではどのように書けばよいのでしょうか?
そんな時に使うのがAVG(アベレージ)
関数です。
この記事では、AVG関数の使い方を初心者向けにやさしく解説し、実務でも役立つ応用例や注意点を紹介します。
AVG関数ってなに?

AVG関数の役割
AVG()
は、指定した数値列の平均値を求めるSQL関数です。
数値型のデータに対してのみ使えます。
基本的な書き方
SELECT AVG(列名) FROM テーブル名;
実際の使用例
-- 学生テーブルから全体の平均点を取得
SELECT AVG(score) FROM students;
-- 商品テーブルから平均価格を取得
SELECT AVG(price) FROM products;
-- 従業員テーブルから平均給与を取得
SELECT AVG(salary) FROM employees;
結果のイメージ
AVG(score)
----------
85.4
ポイント
- 数値のデータ型(INT、DECIMAL、FLOATなど)にのみ使用可能
- 文字列や日付には使えない
- 結果は小数点付きの数値で返される
よくある疑問
Q: 整数の列でも小数点が出るの?
A: はい。平均値は小数点付きで計算されるため、整数の列でも結果は小数になります。
基本の構文を押さえたら、次は条件付きで平均を求める方法を見ていきましょう。
WHERE句で条件付きの平均を求めよう

WHERE句との組み合わせ
特定の条件に合うデータのみで平均を求めたい場合は、WHERE
句を使います。
実際の使用例
-- 成績がAの学生だけの平均点
SELECT AVG(score) FROM students WHERE grade = 'A';
-- 価格が1000円以上の商品の平均価格
SELECT AVG(price) FROM products WHERE price >= 1000;
-- 入社3年以上の従業員の平均給与
SELECT AVG(salary) FROM employees WHERE hire_date < '2022-01-01';
-- 東京都の店舗の平均売上
SELECT AVG(sales) FROM stores WHERE prefecture = '東京都';
複数条件での平均
-- 20代の男性社員の平均給与
SELECT AVG(salary) FROM employees
WHERE age BETWEEN 20 AND 29 AND gender = '男性';
-- 評価4以上の商品の平均価格
SELECT AVG(price) FROM products
WHERE rating >= 4 AND category = 'electronics';
ポイント
- WHERE句で条件を絞ってから平均を計算
- より具体的で意味のある分析ができる
- 複数の条件を組み合わせることも可能
条件を指定することで、目的に合った平均値が取得できます。次は、カテゴリ別に平均を出す方法を紹介します。
GROUP BYでカテゴリ別に平均を出そう

GROUP BYとの組み合わせ
GROUP BY
句を使うと、グループごとに平均を求められます。これにより、比較分析が可能になります。
実際の使用例
-- クラス別の平均点
SELECT class, AVG(score) FROM students GROUP BY class;
-- 部署別の平均給与
SELECT department, AVG(salary) FROM employees GROUP BY department;
-- カテゴリ別の平均価格
SELECT category, AVG(price) FROM products GROUP BY category;
-- 月別の平均売上
SELECT MONTH(sale_date), AVG(amount) FROM sales GROUP BY MONTH(sale_date);
結果のイメージ
class | AVG(score)
------|----------
A組 | 88.5
B組 | 82.3
C組 | 85.7
より詳しい分析例
-- 性別・年代別の平均給与
SELECT
gender,
CASE
WHEN age < 30 THEN '20代'
WHEN age < 40 THEN '30代'
ELSE '40代以上'
END AS age_group,
AVG(salary) AS avg_salary
FROM employees
GROUP BY gender, age_group;
ポイント
- 各グループごとに1つの平均値が計算される
- 複数の列でグループ化することも可能
- 結果はグループ名と平均値のペアで表示される
集計を分けることで、比較や傾向の分析に役立ちます。次は、NULL値が含まれる場合の扱いを説明します。
NULL値の扱いに注意しよう
AVG関数とNULL値
AVG()
はNULL値を自動で除外して計算します。つまり、NULLは0として扱われず、計算対象から外れます。
NULL値の扱い方
-- NULLを含むデータの例
-- score列: 80, 90, NULL, 70, NULL, 85
-- AVG関数は NULLを除外して計算
SELECT AVG(score) FROM students;
-- 結果: (80 + 90 + 70 + 85) / 4 = 81.25
-- 全データ数をカウント
SELECT COUNT(*) FROM students;
-- 結果: 6(NULLも含む)
-- NULL以外のデータ数をカウント
SELECT COUNT(score) FROM students;
-- 結果: 4(NULLを除外)
NULL値を0として扱いたい場合
-- COALESCE関数でNULLを0に変換してから平均を計算
SELECT AVG(COALESCE(score, 0)) FROM students;
-- CASE文を使った方法
SELECT AVG(CASE WHEN score IS NULL THEN 0 ELSE score END) FROM students;
全ての値がNULLの場合
-- 全ての値がNULLの場合、結果もNULLになる
SELECT AVG(score) FROM students WHERE score IS NULL;
-- 結果: NULL
NULL値の確認方法
-- NULL値がどれくらいあるかチェック
SELECT
COUNT(*) AS total_records,
COUNT(score) AS non_null_scores,
COUNT(*) - COUNT(score) AS null_scores
FROM students;
ポイント
- NULL値は自動的に計算から除外される
- NULL値を0として扱いたい場合は変換が必要
- 全ての値がNULLの場合、結果もNULLになる
正確な集計には、NULL値の存在を前提にしておくことが大切です。次は他の関数と組み合わせた例を紹介します。
AVGと他の集計関数を組み合わせよう

複数の集計関数の併用
AVG
はCOUNT
, SUM
, MAX
, MIN
などの関数と一緒に使うことで、より多面的な分析が可能です。
実際の使用例
-- 部署別の詳細統計
SELECT
department,
COUNT(*) AS 人数,
AVG(salary) AS 平均給与,
MAX(salary) AS 最高給与,
MIN(salary) AS 最低給与,
SUM(salary) AS 給与総額
FROM employees
GROUP BY department;
結果のイメージ
department | 人数 | 平均給与 | 最高給与 | 最低給与 | 給与総額
-----------|------|----------|----------|----------|----------
営業部 | 15 | 450000 | 600000 | 300000 | 6750000
開発部 | 20 | 520000 | 800000 | 350000 | 10400000
より高度な分析例
-- 売上データの月次分析
SELECT
YEAR(sale_date) AS 年,
MONTH(sale_date) AS 月,
COUNT(*) AS 取引件数,
AVG(amount) AS 平均売上,
SUM(amount) AS 月間売上,
ROUND(AVG(amount), 0) AS 平均売上_整数
FROM sales
GROUP BY YEAR(sale_date), MONTH(sale_date)
ORDER BY 年, 月;
条件付きの集計
-- 商品カテゴリ別の評価分析
SELECT
category,
COUNT(*) AS 商品数,
AVG(price) AS 平均価格,
AVG(rating) AS 平均評価,
COUNT(CASE WHEN rating >= 4 THEN 1 END) AS 高評価商品数
FROM products
GROUP BY category
HAVING AVG(rating) >= 3.5; -- 平均評価が3.5以上のカテゴリのみ
小数点の調整
-- 平均値を小数点以下2桁に丸める
SELECT
class,
ROUND(AVG(score), 2) AS 平均点
FROM students
GROUP BY class;
-- 平均値を整数に切り上げ
SELECT
department,
CEIL(AVG(salary)) AS 平均給与_切り上げ
FROM employees
GROUP BY department;
ポイント
- 複数の集計関数を組み合わせて包括的な分析
- ROUND関数で小数点を調整可能
- HAVING句で集計結果に条件を設定
複数の集計関数を使いこなせば、SQLだけで高度なデータ分析ができます。
まとめ
SQLのAVG
関数は、数値の平均値を求めるための基本的かつ重要なツールです。
覚えるべきポイント
- 基本構文:
SELECT AVG(列名) FROM テーブル名
- WHERE句との組み合わせ:条件を絞って平均を計算
- GROUP BYとの組み合わせ:カテゴリ別の平均を算出
- NULL値の扱い:自動的に除外されて計算される
実務での活用場面
- 売上分析:月別・地域別の平均売上
- 人事データ:部署別・年代別の平均給与
- 商品分析:カテゴリ別の平均価格・平均評価
- 学習データ:科目別・クラス別の平均成績
よくある活用パターン
- 全体の傾向把握
- グループ間の比較分析
- パフォーマンス指標の算出
- 異常値の検出(平均から大きく外れる値)
コメント