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 |
最大値 | 最高注文額、最新注文日 |
平均だけを見ると、極端に高い注文の影響を受けることがあります。
そのため、MIN や MAX も一緒に確認すると、データの範囲をつかみやすくなります。
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を考えてみましょう。
- 完了注文の件数と売上合計を出す。
- 完了注文の平均・最小・最大注文金額を出す。
- 商品明細から販売数量の合計を出す。
- 平均だけを見て判断すると危険な理由を説明する。
まとめ
| 関数 | 意味 | 例 |
|---|---|---|
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) |
この章のキーメッセージ: 集計関数は、行データを分析用の指標に変える基本技術です。数字を出すだけでなく、「どの行を対象にした指標なのか」を必ず確認しましょう。
この章の確認
COUNT(*)とCOUNT(列名)の違いを説明してください。- 完了注文の売上合計を出すSQLを書いてください。
ordersテーブルから平均注文金額、最大注文金額、最小注文金額を出すには、どの関数を使いますか?- 売上集計で
WHERE status = 'completed'のような条件が重要になる理由を説明してください。