MariaDBで顧客ごとの注文履歴に基づいて平均注文金額を分析する:OVERオプションの使い方


MariaDBのAVG関数(平均値関数)は、列内の数値データの平均値を算出するものです。これは、集計や分析を行う際に非常に役立つ機能です。

文法

AVG関数の基本的な文法は次のとおりです。

SELECT AVG(column_name)
FROM table_name;

次の例は、customers テーブルの order_amount 列の平均値を算出します。

SELECT AVG(order_amount)
FROM customers;

結果

このクエリを実行すると、次のような結果が得られます。

AVG(order_amount)
--------------
123.45

オプション

AVG関数には、いくつかのオプションがあります。

  • WHERE: 条件に基づいて平均値を算出します。
  • OVER: グループごとに平均値を算出します。
  • DISTINCT: 重複する値を除外します。

次の例は、order_statusshipped の注文の order_amount 列の平均値を算出します。

SELECT AVG(order_amount)
FROM customers
WHERE order_status = 'shipped';

結果

AVG(order_amount)
--------------
150.00

AVG関数の使用例

AVG関数は、さまざまな場面で使用できます。

  • テストの平均点数を算出する
  • 商品の平均販売価格を算出する
  • 顧客の平均注文金額を算出する

MariaDBのAVG関数 is a powerful tool for calculating the average value of numerical data. It can be used in a variety of situations to gain insights from your data.

  • AVG関数は、大きなデータセットに対して効率的に動作します。
  • AVG関数は、整数と浮動小数点数の両方を受け入れることができます。
  • AVG関数は、NULL値を無視します。


SELECT AVG(order_amount) AS average_order_amount
FROM customers;

結果

average_order_amount
------------------
123.45

例2:商品カテゴリごとの平均販売価格

この例では、products テーブルの price 列の平均値を、category_id でグループ化して算出します。

SELECT category_id, AVG(price) AS average_price
FROM products
GROUP BY category_id;

結果

category_id | average_price
------------+--------------
1           | 10.00
2           | 20.00
3           | 30.00

例3:テストの平均点数(条件付き)

この例では、scores テーブルの score 列の平均値を、student_id が 10 以下の学生に絞り込んで算出します。

SELECT AVG(score) AS average_score
FROM scores
WHERE student_id <= 10;

結果

average_score
-------------
85.00

例4:DISTINCTオプションの使用

この例では、customers テーブルの order_amount 列の重複を除いた平均値を算出します。

SELECT AVG(DISTINCT order_amount) AS average_order_amount_distinct
FROM customers;

結果

average_order_amount_distinct
------------------------------
135.00

例5:OVERオプションの使用

この例では、orders テーブルの order_amount 列の平均値を、customer_id でグループ化して算出します。また、order_date 列に基づいてウィンドウを移動させ、各顧客の注文における平均注文金額の変化を分析します。

SELECT customer_id, order_date, AVG(order_amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS average_order_amount_per_customer
FROM orders;

結果

customer_id | order_date     | average_order_amount_per_customer
------------+---------------+----------------------------------
1           | 2023-01-01     | 100.00
1           | 2023-02-01     | 120.00
1           | 2023-03-01     | 150.00
2           | 2023-04-01     | 50.00
2           | 2023-05-01     | 60.00
2           | 2023-06-01     | 70.00

これらの例は、MariaDBにおけるAVG関数の基本的な使用方法を示しています。より複雑な分析を行う場合は、WHERE句やGROUP BY句などの他のSQL句と組み合わせて使用することができます。

  • AVG関数の詳細については、MariaDBの公式ドキュメントを参照することをお勧めします。
  • 上記の例は、あくまでも基本的な使用方法を示したものであり、状況に応じてさまざまなバリエーションが考えられます。


代替方法

  • SUM関数とCOUNT関数: 以下の式は、AVG関数と同等の結果を返すことができます。
SELECT SUM(column_name) / COUNT(*) AS average_value
FROM table_name;

この方法は、NULL値を処理する際に役立ちます。SUM関数はNULL値を0としてカウントするため、AVG関数よりも正確な結果を得られる場合があります。

  • MEDIAN関数: 列の中央値を算出します。これは、極端な値の影響を受けにくい場合に役立ちます。
SELECT MEDIAN(column_name) AS median_value
FROM table_name;
  • MODE関数: 列の最頻値を算出します。これは、特定の値が最も一般的であるかどうかを確認したい場合に役立ちます。
SELECT MODE(column_name) AS mode_value
FROM table_name;
  • CASE WHEN式: 複雑な条件に基づいて平均値を算出する場合に使用できます。
SELECT
  CASE
    WHEN column_name >= 100 THEN AVG(column_name)
    ELSE 0
  END AS average_value
FROM table_name;
  • サブクエリ: 複数のテーブルからデータを結合して平均値を算出する場合に使用できます。
SELECT AVG(price) AS average_price
FROM products
WHERE product_id IN (
  SELECT product_id
  FROM order_details
);