【SQL】AVG関数で平均値を求める方法を分かりやすく解説

カラムの平均値を求めたい場合はAVG関数を使います。

本記事ではAVG関数の基本的な使い方から、小数点以下の処理方法、WHERE句やGROUP BY句との併用方法まで具体例を交えて解説していきます。

AVG関数の使い方

AVG関数は指定したカラムの値の平均を求めるために使用します。そのため、指定するカラムは数値情報を扱っている必要があります。

AVG関数の基本構文は下記です。

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

AVGの後にカッコ付きでカラム名を指定します。非常にシンプルですね。

ただし、このままでは取得後のカラム名はAVG(カラム名)になってしまうので、AS句を使って別名をつけると見やすいです。

AS句を使うと下記のようになります。

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

AS句については下記の記事で詳しくまとめています。

【SQL】AS句を使ってカラムやテーブルに別名をつける

それでは、具体例を見ながら理解を深めていきましょう!

サンプルデータ

サンプルデータとして下記のとおり、productsテーブルを用意します。

priceカラムは製品の価格、stockカラムは製品の在庫を表しています。

idnamecategorypricestock
1化粧水スキンケア100020
2クリームスキンケア1500100
3パックスキンケア15005
4ファンデーションメイク448033
5口紅メイク198051
productsテーブル

カラムの平均値を求める

まずは、指定したカラムの平均値を求める方法を見ていきます。

検索クエリ

productsテーブルに保存されている製品の平均価格を取得する

SQL
SELECT AVG(price)
FROM products;

AVG関数でpriceカラムを指定します。

実行結果

avg(price)
2092

価格の平均値を取得することができました。

また、AS句を使ってカラムに別名をつけた場合は下記のようになります。

SQL
SELECT SUM(price) AS '平均価格'
FROM products;
平均価格
2092

複数カラムの平均値を求める

次に、複数カラムで平均を求める方法を見ていきます。

検索クエリ

productsテーブルに保存されている製品の価格と在庫の平均値をそれぞれ取得する

SQL
SELECT AVG(price), AVG(stock)
FROM products;

カンマ区切りで、AVG関数を使ってpriceカラムとstockカラムをそれぞれ指定します。

実行結果

AVG(price)AVG(stock)
209241.8

価格と在庫の平均値をそれぞれ取得することができました。

平均値から小数点以下を四捨五入する

stockカラムの平均値が41.8と小数点を含む形になりました。整数だけでデータを取得したいケースもあるはずです。

よって、次に小数点以下は四捨五入して計算する方法を見ていきます。

四捨五入をするためにはROUND関数を使います。ROUND(数値)のカッコの中に数値を入れることで小数点第一位が四捨五入されて整数を取得できます。

検索クエリ

SQL
SELECT ROUND(AVG(stock))
FROM products;

AVG(stock)をROUND関数で囲むことで、AVG(stock)の結果を四捨五入できます。

実行結果

ROUND(AVG(stock))
42

41.8の小数点第一位が四捨五入されて42になりました。

条件に一致したカラムの平均を求める(WHERE句)

次に、WHERE句を使って検索条件を指定した上で平均値を求める方法を見ていきます。

検索クエリ

価格が¥1,500以上の製品だけに絞って平均価格を取得する

SQL
SELECT AVG(price)
FROM products
WHERE price >= 1500;

WHEREを使ってprice >= 1500の条件を指定し、価格が¥1,500以上だけのレコードに絞っています。

実行結果

AVG(price)
2365

価格が¥1,500以上の製品だけに絞った上で平均価格を取得することができました。

WHERE句については下記の記事で詳しくまとめています。

WHERE句を使って検索条件を指定する:SELECT文の基本

グループごとに平均を求める(GROUP BY句)

次に、特定のカラムをグルーピングした上で、平均値を求める方法を見ていきます。

グルーピングにはGROUP BY句を用います。

検索クエリ

カテゴリーごとの平均価格を取得する

SQL
SELECT AVG(price)
FROM products
GROUP BY category;

GROUP BYでcategoryカラムを指定することで、スキンケアとメイクカテゴリーに製品をカテゴライズできます。

実行結果

categoryAVG(price)
スキンケア1333.3333
メイク3230

カテゴリーごと製品の平均価格を取得することができました。

GROUP BY句については下記で詳しくまとめています。

GROUP BY句を使って集計!COUNTやHAVINGとの合わせ技も解説【SQL】

内容のまとめ

  • AVG関数は指定したカラムの値の平均を求めるために使用する
  • AVG関数の基本の使い方はAVG(カラム名)
  • SQLの実行結果ではAVG(カラム名)がカラム名となってしまうので、AS句を使って別名をつけると見やすくなる
  • 複数カラムの平均値を求める場合はカンマで区切る
  • 平均結果の小数点以下を四捨五入したい場合はROUND関数を使う
  • 条件に一致した値の平均を求めたい場合はWHERE句を使う
  • グループごとの平均値を求めたい場合はGROUP BY句を使う