青の統計学-DS Playground-

COUNT / SUM / AVG / MIN / MAX: 行から指標を作る

Stage 2 — 第1章 | データ分析基礎カリキュラム 推定学習時間:30〜40分 | 難易度:★★☆☆☆


この章で学ぶこと

Stage 1では、必要な列を取り出し、条件で行を絞る方法を学びました。 次に必要になるのは、行を1件ずつ眺めるだけでなく、データ全体を数字で要約することです。

たとえばECサイトでは、次のような問いに答える必要があります。

  • 注文は何件あったか
  • 売上はいくらだったか
  • 平均注文金額はいくらか
  • 最も高い注文、最も低い注文はいくらか

この章では、行から指標を作るための基本集計関数 COUNT / SUM / AVG / MIN / MAX を学びます。

この章を終えると、こんなことができるようになります:

  • 行数や件数を COUNT で数えられる
  • 金額や数量の合計を SUM で計算できる
  • 平均、最小値、最大値を集計できる
  • 集計結果に別名をつけ、分析しやすい表を作れる

1. 集計関数は「たくさんの行を1つの値にまとめる」

通常の SELECT は、テーブルの行をそのまま表示します。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE status = 'completed';
          

これは完了注文を1件ずつ表示します。 一方で、「完了注文が何件あるか」を知りたいときは、行を数える必要があります。

SELECT COUNT(*) AS order_count
          FROM orders
          WHERE status = 'completed';
          

このSQLは、完了注文の行数を1つの値として返します。 集計関数は、たくさんの行を分析用の指標に変換する道具です。


2. COUNTで件数を数える

COUNT は件数を数える関数です。 最も基本的なのは COUNT(*) です。

SELECT COUNT(*) AS order_count
          FROM orders;
          

これは orders テーブルの行数、つまり注文件数を数えます。

完了注文だけを数える場合は、WHERE と組み合わせます。

SELECT COUNT(*) AS completed_order_count
          FROM orders
          WHERE status = 'completed';
          

実務では、集計前に「どの行を数えるのか」を明確にすることが重要です。 キャンセル注文を含めるか除くかで、注文件数の意味が変わります。


3. COUNT(*) と COUNT(列名) の違い

COUNT(*) は行数を数えます。 一方、COUNT(列名) は、その列がNULLではない行だけを数えます。

SELECT
            COUNT(*) AS customer_rows,
            COUNT(prefecture) AS customers_with_prefecture
          FROM customers;
          

このSQLでは、顧客行数と、都道府県が入力されている顧客数を比べられます。

書き方 数えるもの
COUNT(*) 行数
COUNT(prefecture) prefecture がNULLではない行数
COUNT(DISTINCT customer_id) 重複を除いた顧客数

欠損のある列を数えるときは、COUNT(*)COUNT(列名) の違いに注意しましょう。


4. SUMで合計を作る

売上や数量の合計を出すには SUM を使います。

SELECT SUM(total_amount) AS total_sales
          FROM orders
          WHERE status = 'completed';
          

これは完了注文の売上合計を計算します。 EC分析では、売上を集計するときにキャンセル注文を除くことが多いため、WHERE status = 'completed' のような条件が重要になります。

注文明細から販売点数を数える例です。

SELECT SUM(quantity) AS sold_units
          FROM order_items;
          

order_items は1注文の中の商品明細を表します。 販売点数を見るときは、注文行数ではなく quantity の合計を見る必要があります。


5. AVG / MIN / MAXで代表値と範囲を見る

平均、最小値、最大値もよく使います。

SELECT
            AVG(total_amount) AS average_order_amount,
            MIN(total_amount) AS minimum_order_amount,
            MAX(total_amount) AS maximum_order_amount
          FROM orders
          WHERE status = 'completed';
          

このSQLは、完了注文の平均注文金額、最小注文金額、最大注文金額をまとめて出します。

関数 意味 実務での使いどころ
AVG 平均 平均注文金額、平均購入数量
MIN 最小値 最安注文、最古注文日
MAX 最大値 最高注文額、最新注文日

平均だけを見ると、極端に高い注文の影響を受けることがあります。 そのため、MINMAX も一緒に確認すると、データの範囲をつかみやすくなります。


6. 複数の指標を1つのSQLで出す

実務では、1つの指標だけでなく、複数の指標を並べて確認することが多いです。

SELECT
            COUNT(*) AS order_count,
            COUNT(DISTINCT customer_id) AS buyer_count,
            SUM(total_amount) AS total_sales,
            AVG(total_amount) AS average_order_amount,
            MIN(order_date) AS first_order_date,
            MAX(order_date) AS latest_order_date
          FROM orders
          WHERE status = 'completed';
          

このSQLだけで、完了注文について次の情報がわかります。

  • 注文は何件あったか
  • 購入した顧客は何人いたか
  • 売上合計はいくらか
  • 平均注文金額はいくらか
  • 対象期間の最初と最後の注文日はいつか

集計結果には、必ず AS でわかりやすい名前をつけましょう。 後でレポートやダッシュボードに使うとき、列名の意味が伝わりやすくなります。


7. 集計前に条件を確認する

集計関数は便利ですが、条件が曖昧なままだと、もっともらしい数字でも意味が不明になります。

たとえば「売上」と言うとき、次のような確認が必要です。

  • status = 'completed' の注文だけか
  • 返品やキャンセルを除いているか
  • total_amount は税込か税抜か
  • 期間はどこからどこまでか
  • テスト注文は含まれていないか

SQLでは、これらの多くを WHERE で表します。

SELECT
            SUM(total_amount) AS january_sales
          FROM orders
          WHERE status = 'completed'
            AND order_date BETWEEN '2026-01-01' AND '2026-01-31';
          

このSQLは「2026年1月の完了注文売上」を定義しています。 集計結果を共有するときは、数字だけでなく条件も説明できるようにしましょう。


実務での使いどころ: 指標を作る前に件数を疑う

集計関数は、データを指標へ変換する入口です。 ただし、SUMやAVGだけを見ると、件数の少なさや外れ値に気づけないことがあります。

SELECT
            COUNT(*) AS order_count,
            SUM(total_amount) AS sales,
            AVG(total_amount) AS average_order_amount,
            MIN(total_amount) AS min_order_amount,
            MAX(total_amount) AS max_order_amount
          FROM orders
          WHERE status = 'completed';
          

このように、合計・平均・最小・最大・件数を一緒に見ると、数字の信頼性を判断しやすくなります。 たとえば平均注文金額が高くても、注文件数が3件しかなければ、まだ判断には弱いかもしれません。

指標 一緒に見るとよいもの
合計売上 注文件数、対象期間
平均注文金額 件数、最大値、最小値
購入者数 登録者数、訪問者数
商品販売数 商品カテゴリ、在庫状況

集計値は、元の行を大きく要約します。 要約後の数字だけでなく、何件のデータから作られた数字かを確認しましょう。

ミニ演習

次の集計SQLを考えてみましょう。

  1. 完了注文の件数と売上合計を出す。
  2. 完了注文の平均・最小・最大注文金額を出す。
  3. 商品明細から販売数量の合計を出す。
  4. 平均だけを見て判断すると危険な理由を説明する。

まとめ

関数 意味
COUNT(*) 行数を数える COUNT(*) AS order_count
COUNT(列名) NULLではない値を数える COUNT(prefecture)
SUM 合計する SUM(total_amount)
AVG 平均を出す AVG(total_amount)
MIN 最小値を出す MIN(order_date)
MAX 最大値を出す MAX(order_date)

この章のキーメッセージ: 集計関数は、行データを分析用の指標に変える基本技術です。数字を出すだけでなく、「どの行を対象にした指標なのか」を必ず確認しましょう。


この章の確認

  1. COUNT(*)COUNT(列名) の違いを説明してください。
  2. 完了注文の売上合計を出すSQLを書いてください。
  3. orders テーブルから平均注文金額、最大注文金額、最小注文金額を出すには、どの関数を使いますか?
  4. 売上集計で WHERE status = 'completed' のような条件が重要になる理由を説明してください。

関連演習