カラムの平均値を求めたい場合はAVG関数を使います。
本記事ではAVG関数の基本的な使い方から、小数点以下の処理方法、WHERE句やGROUP BY句との併用方法まで具体例を交えて解説していきます。
目次
AVG関数の使い方
AVG関数は指定したカラムの値の平均を求めるために使用します。そのため、指定するカラムは数値情報を扱っている必要があります。
AVG関数の基本構文は下記です。
SELECT AVG(カラム名)
FROM テーブル名;
AVG
の後にカッコ付きでカラム名を指定します。非常にシンプルですね。
ただし、このままでは取得後のカラム名はAVG(カラム名)
になってしまうので、AS句を使って別名をつけると見やすいです。
AS句を使うと下記のようになります。
SELECT AVG(カラム名) AS 別名
FROM テーブル名;
AS句については下記の記事で詳しくまとめています。
【SQL】AS句を使ってカラムやテーブルに別名をつけるそれでは、具体例を見ながら理解を深めていきましょう!
サンプルデータ
サンプルデータとして下記のとおり、productsテーブルを用意します。
priceカラムは製品の価格、stockカラムは製品の在庫を表しています。
id | name | category | price | stock |
---|---|---|---|---|
1 | 化粧水 | スキンケア | 1000 | 20 |
2 | クリーム | スキンケア | 1500 | 100 |
3 | パック | スキンケア | 1500 | 5 |
4 | ファンデーション | メイク | 4480 | 33 |
5 | 口紅 | メイク | 1980 | 51 |
カラムの平均値を求める
まずは、指定したカラムの平均値を求める方法を見ていきます。
検索クエリ
productsテーブルに保存されている製品の平均価格を取得する
SELECT AVG(price)
FROM products;
AVG関数でpriceカラムを指定します。
実行結果
avg(price) |
---|
2092 |
価格の平均値を取得することができました。
また、AS句を使ってカラムに別名をつけた場合は下記のようになります。
SELECT SUM(price) AS '平均価格'
FROM products;
平均価格 |
---|
2092 |
複数カラムの平均値を求める
次に、複数カラムで平均を求める方法を見ていきます。
検索クエリ
productsテーブルに保存されている製品の価格と在庫の平均値をそれぞれ取得する
SELECT AVG(price), AVG(stock)
FROM products;
カンマ区切りで、AVG関数を使ってpriceカラムとstockカラムをそれぞれ指定します。
実行結果
AVG(price) | AVG(stock) |
---|---|
2092 | 41.8 |
価格と在庫の平均値をそれぞれ取得することができました。
平均値から小数点以下を四捨五入する
stockカラムの平均値が41.8
と小数点を含む形になりました。整数だけでデータを取得したいケースもあるはずです。
よって、次に小数点以下は四捨五入して計算する方法を見ていきます。
四捨五入をするためにはROUND関数を使います。ROUND(数値)
のカッコの中に数値を入れることで小数点第一位が四捨五入されて整数を取得できます。
検索クエリ
SELECT ROUND(AVG(stock))
FROM products;
AVG(stock)
をROUND関数で囲むことで、AVG(stock)
の結果を四捨五入できます。
実行結果
ROUND(AVG(stock)) |
---|
42 |
41.8
の小数点第一位が四捨五入されて42
になりました。
条件に一致したカラムの平均を求める(WHERE句)
次に、WHERE句を使って検索条件を指定した上で平均値を求める方法を見ていきます。
検索クエリ
価格が¥1,500以上の製品だけに絞って平均価格を取得する
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句を用います。
検索クエリ
カテゴリーごとの平均価格を取得する
SELECT AVG(price)
FROM products
GROUP BY category;
GROUP BY
でcategoryカラムを指定することで、スキンケアとメイクカテゴリーに製品をカテゴライズできます。
実行結果
category | AVG(price) |
---|---|
スキンケア | 1333.3333 |
メイク | 3230 |
カテゴリーごと製品の平均価格を取得することができました。
GROUP BY句については下記で詳しくまとめています。
GROUP BY句を使って集計!COUNTやHAVINGとの合わせ技も解説【SQL】内容のまとめ
- AVG関数は指定したカラムの値の平均を求めるために使用する
- AVG関数の基本の使い方は
AVG(カラム名)
- SQLの実行結果では
AVG(カラム名)
がカラム名となってしまうので、AS句を使って別名をつけると見やすくなる - 複数カラムの平均値を求める場合はカンマで区切る
- 平均結果の小数点以下を四捨五入したい場合はROUND関数を使う
- 条件に一致した値の平均を求めたい場合はWHERE句を使う
- グループごとの平均値を求めたい場合はGROUP BY句を使う