MySQLのAVG関数の使い方!数値の平均値を算出する

MySQL

MySQLのAVG関数について書いています。

AVG関数は、指定したカラムの数値データの平均値を計算するために使用されます。
商品の平均価格、顧客の平均年齢、特定の期間の平均売上など、データベース内の数値情報の平均を算出する際に役立ちます。

AVG関数の基本的な構文

AVG関数の基本的な構文は以下の通りです。

SELECT AVG(column_name)
FROM table_name;
  • AVG(column_name): 平均値を計算したい数値型のカラムを指定します。
  • FROM table_name: データを取得するテーブルを指定します。

このクエリを実行すると、指定したカラムのすべての数値レコードの平均値が返されます。

AVG関数とWHERE句の組み合わせ

WHERE句をAVG関数と組み合わせて使用することで、特定の条件を満たすレコードの平均値を計算できます。

SELECT AVG(age)
FROM customers
WHERE city = 'Tokyo';

上記の例では、customersテーブルからcityが’Tokyo’の顧客のageカラムの平均値を計算します。

AVG関数とGROUP BY句の組み合わせ

GROUP BY句をAVG関数と組み合わせて使用すると、特定のカラムの値でグループ化された各グループごとの平均値を計算できます。

SELECT product_category, AVG(price)
FROM products
GROUP BY product_category;

上記の例では、productsテーブルのpriceカラムをproduct_categoryごとに集計し、各カテゴリの平均価格を表示します。

AVG関数におけるNULL値の扱い

AVG関数は、計算対象のカラムに NULL 値が含まれている場合、その NULL 値を無視して平均値を計算します
つまり、NULL値は平均値の計算の対象となるレコード数には含まれません。

CREATE TABLE scores (
    student VARCHAR(50),
    score INT
);

INSERT INTO scores (student, score) VALUES
('Alice', 80),
('Bob', 90),
('Charlie', NULL),
('David', 75);

SELECT AVG(score) FROM scores;
-- 結果:81.6667 (NULL値は無視され、(80 + 90 + 75) / 3 で計算される)

なお、NULL値が多い場合、平均値が実際の傾向を正確に表さないこともあるため注意が必要です。

AVG関数を使う際の注意点

  • 数値型カラムのみ: AVG関数は、数値型(INT, DECIMAL, FLOAT など)のカラムに対してのみ使用できます。文字列型や日付型などの数値以外のカラムを指定すると、通常は 0 が返されるか、エラーが発生する可能性があります(MySQLのバージョンやSQLモードの設定によります)。
  • 集計結果は1行: GROUP BY 句を使用しない場合、AVG関数の結果は通常1行のスカラ値(単一の値)として返されます。
  • エイリアスの使用: 結果のカラム名を分かりやすくするために、ASキーワードを使ってエイリアス(別名)をつけることが推奨されます。

AVG関数と他の集計関数

MySQLには、AVG関数以外にも様々な集計関数があります。

  • COUNT(): レコードの数をカウントします。
  • SUM(): 数値データの合計値を計算します。
  • MIN(): 数値データの最小値を返します。
  • MAX(): 数値データの最大値を返します。

これらの関数は、それぞれ異なる目的でデータの集計に利用されます。
AVG関数は、数値データの平均値を計算するための関数であることを理解しておきましょう。

AVG関数の使用例

例1:全商品の平均価格を計算する

SELECT AVG(price) AS average_price
FROM products;

例2:特定のカテゴリの商品の平均価格を計算する

SELECT AVG(price) AS average_price
FROM products
WHERE category = 'Electronics';

例3:月ごとの平均売上を計算する

SELECT DATE_FORMAT(order_date, '%Y-%m') AS sales_month, AVG(total_amount) AS average_monthly_sales
FROM orders
GROUP BY sales_month
ORDER BY sales_month;

まとめ

MySQLのAVG関数は、テーブル内の数値データの平均値を簡単に計算できる非常に便利な関数です。
WHERE句で条件を絞ったり、GROUP BY句でグループ化したりすることで、より詳細な平均値を算出することができます。

NULL値の扱い方や、数値型カラムのみに適用できる点に注意し、データの分析やレポート作成にAVG関数を効果的に活用してください。

コメント