日付集計: 日次・月次・曜日別に見る
Stage 2 — 第4章 | データ分析基礎カリキュラム 推定学習時間:35〜45分 | 難易度:★★★☆☆
この章で学ぶこと
ECデータの分析では、時間の変化を見ることがとても重要です。 売上が伸びているのか、週末に注文が増えるのか、月ごとの季節性があるのかは、1件ずつ注文を見るだけではわかりません。
この章では、注文日を使って日次・月次・曜日別に集計する考え方を学びます。
この章を終えると、こんなことができるようになります:
- 日付ごとの売上や注文件数を集計できる
- 月次集計で大きな傾向を確認できる
- 曜日別集計で行動パターンを見られる
- 日付集計で注意すべき粒度と期間条件を説明できる
1. 日付集計は「いつ」を分析する入口
注文データには、多くの場合 order_date のような日付列があります。
この列を使うと、売上や注文数を時間軸で見ることができます。
たとえば、次のような問いに答えられます。
- 日別の売上は安定しているか
- 月ごとの売上は伸びているか
- 注文が多い曜日はあるか
- キャンペーン後に注文数は増えたか
日付集計では、まず「どの日付列を使うのか」を確認します。 注文日、決済日、発送日では、同じ売上でも見え方が変わることがあります。
2. 日次で集計する
日別の注文件数と売上を出す基本形です。
SELECT
order_date,
COUNT(*) AS order_count,
SUM(total_amount) AS sales
FROM orders
WHERE status = 'completed'
GROUP BY order_date
ORDER BY order_date;
このSQLは、完了注文を注文日ごとにまとめます。 結果の1行は「1日」を表します。
日次集計は、直近の変化やキャンペーンの影響を見るときに便利です。 ただし、日ごとの変動は大きくなりやすいため、1日だけで判断しすぎないようにします。
3. 月次で集計する
月ごとの傾向を見るには、日付から年月を取り出して集計します。
データベースによって関数名は異なりますが、ここでは DATE_TRUNC を使う例で考えます。
SELECT
DATE_TRUNC('month', order_date) AS order_month,
COUNT(*) AS order_count,
SUM(total_amount) AS sales
FROM orders
WHERE status = 'completed'
GROUP BY DATE_TRUNC('month', order_date)
ORDER BY order_month;
このSQLは、注文日を月単位に丸めて、月ごとの注文件数と売上を出します。
月次集計は、日次よりも変動がならされるため、中長期の傾向を見やすくなります。 売上が伸びているか、繁忙期があるか、施策後に変化が続いているかを確認できます。
4. 関数の書き方はデータベースによって違う
日付から月や曜日を取り出す関数は、SQLの種類によって書き方が違います。
| 目的 | 例 |
|---|---|
| 月単位に丸める | DATE_TRUNC('month', order_date) |
| 年月文字列にする | TO_CHAR(order_date, 'YYYY-MM') |
| 曜日を取り出す | EXTRACT(DOW FROM order_date) |
学習では、まず「日付を月や曜日に変換してから GROUP BY する」と理解しましょう。
実務では、使っているデータベースの関数に合わせて書き換えます。
5. 曜日別に集計する
曜日別の注文傾向を見る例です。
SELECT
EXTRACT(DOW FROM order_date) AS day_of_week,
COUNT(*) AS order_count,
SUM(total_amount) AS sales,
AVG(total_amount) AS average_order_amount
FROM orders
WHERE status = 'completed'
GROUP BY EXTRACT(DOW FROM order_date)
ORDER BY day_of_week;
曜日別集計では、週末に注文が多いのか、平日の昼に強いのかといった行動パターンを見られます。 広告配信やメール配信のタイミングを考える材料にもなります。
ただし、曜日番号が何曜日を表すかはデータベースによって異なることがあります。 結果を読む前に、0が日曜なのか月曜なのかを確認しましょう。
6. 日付集計と期間条件を組み合わせる
日付集計では、対象期間を明確にすることが重要です。 たとえば、2026年1月から3月までの月次売上を見るSQLです。
SELECT
DATE_TRUNC('month', order_date) AS order_month,
COUNT(*) AS order_count,
SUM(total_amount) AS sales
FROM orders
WHERE status = 'completed'
AND order_date >= '2026-01-01'
AND order_date < '2026-04-01'
GROUP BY DATE_TRUNC('month', order_date)
ORDER BY order_month;
日付時刻型で時刻まで入っている場合、BETWEEN '2026-01-01' AND '2026-03-31' では3月31日の夜のデータを取りこぼすことがあります。
そのため、実務では「開始日以上、翌期間の開始日未満」と書くことがよくあります。
7. ゼロの日をどう扱うか
日次集計では、注文が1件もない日は結果に出ないことがあります。
SELECT
order_date,
COUNT(*) AS order_count
FROM orders
WHERE status = 'completed'
GROUP BY order_date
ORDER BY order_date;
このSQLは、orders に存在する日付だけを返します。
注文がゼロの日も表に出したい場合は、日付カレンダーのテーブルを用意して結合する必要があります。
この章では詳しく扱いませんが、日付集計では「データがない日」と「ゼロだった日」の違いを意識しましょう。 グラフを作るときに重要になります。
8. 日次・月次・曜日別の使い分け
| 集計単位 | 向いている分析 | 注意点 |
|---|---|---|
| 日次 | 直近変化、キャンペーン影響、異常検知 | 変動が大きい |
| 月次 | 中長期トレンド、売上成長、季節性 | 細かい変化は見えにくい |
| 曜日別 | 行動パターン、配信タイミング検討 | 祝日やセール日の影響を受ける |
同じ売上データでも、集計単位を変えると見えるものが変わります。 分析目的に合わせて、日次・週次・月次・曜日別を使い分けましょう。
実務での使いどころ: 時間軸で変化を見る
日付集計は、売上や利用状況の変化を見るための基本です。 同じ売上100万円でも、毎日安定して売れているのか、特定の日だけ大きく売れたのかで判断は変わります。
SELECT
DATE_TRUNC('day', order_date) AS order_day,
COUNT(*) AS order_count,
SUM(total_amount) AS sales
FROM orders
WHERE status = 'completed'
GROUP BY DATE_TRUNC('day', order_date)
ORDER BY order_day;
日次、週次、月次はそれぞれ向いている用途が違います。
| 集計単位 | 向いている用途 |
|---|---|
| 日次 | キャンペーン直後、障害、曜日差を見る |
| 週次 | 日々のばらつきを少しならして見る |
| 月次 | 事業全体のトレンドを見る |
| 曜日別 | 曜日による行動差を見る |
期間比較では、対象期間の長さもそろえます。 31日ある月と28日ある月を単純比較すると、日数差の影響を受けることがあります。
ミニ演習
次の目的に合う日付集計を考えてください。
- キャンペーン開始後3日間の注文数を見たい。
- 半年間の売上トレンドを見たい。
- 曜日によって注文数が違うか見たい。
- 月次売上を比較するとき、日数差に注意すべき理由を説明する。
まとめ
| 構文・考え方 | 意味 | 例 |
|---|---|---|
| 日次集計 | 日付ごとに集計する | GROUP BY order_date |
| 月次集計 | 月ごとに集計する | DATE_TRUNC('month', order_date) |
| 曜日別集計 | 曜日ごとに集計する | EXTRACT(DOW FROM order_date) |
| 期間条件 | 集計対象期間を決める | order_date >= ... AND order_date < ... |
この章のキーメッセージ: 日付集計は、データを時間軸で見るための基本です。どの日付列を使うか、どの粒度で見るか、どの期間を対象にするかを明確にしましょう。
この章の確認
- 日次集計と月次集計では、それぞれ何を見るのに向いていますか?
- 完了注文の日別売上を出すSQLを書いてください。
- 月次集計で
DATE_TRUNC('month', order_date)のような処理を使う理由を説明してください。 - 注文がゼロの日が結果に出ない場合、どのような点に注意が必要ですか?