はじめに
MySQLで日付データを扱う際、週単位での集計が必要になることがあります。
この記事では、YEARWEEKを使って売上データを週ごとにグループ化する方法を解説します。
この記事でわかること
- YEARWEEKの基本的な使い方
- 売上データを週ごとにグループ化するSQLクエリの書き方
- グループ化したデータの活用方法
対象読者
- MySQLを使用している開発者やデータアナリスト
- 日付データの週単位集計に悩んでいる方
- SQLの基本的な知識がある方
YEARWEEKの基本
YEARWEEKは、日付から年と週の番号を取得する関数です。
SELECT YEARWEEK('2024-03-15', 0);
この関数は'YYYYWW'形式の数値を返します。例えば、2024年の第11週なら'202411'となります。
売上データの週ごとのグループ化
以下のようなサンプルテーブルがあるとします:
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
sale_date DATE,
amount DECIMAL(10, 2)
);
このテーブルのデータを週ごとにグループ化するSQLは次のようになります:
SELECT
YEARWEEK(sale_date, 1) AS year_week,
SUM(amount) AS total_sales
FROM
sales
GROUP BY
YEARWEEK(sale_date, 1)
ORDER BY
year_week;
このクエリは以下のことを行います:
- YEARWEEK関数で売上日を年週に変換
- GROUP BY句で年週ごとにグループ化
- SUM関数で各週の売上合計を計算
- 結果を年週順にソート
結果の解釈
クエリの結果は次のようになります:
+----------+-------------+
| year_week| total_sales |
+----------+-------------+
| 202410 | 1000.00 |
| 202411 | 1500.00 |
| 202412 | 2000.00 |
+----------+-------------+
この結果から、2024年の第10週、第11週、第12週の売上合計がわかります。
応用:週の開始日を取得
週の開始日を知りたい場合は、以下のようにクエリを修正できます:
SELECT
YEARWEEK(sale_date, 1) AS year_week,
DATE_ADD(DATE(YEARWEEK(sale_date, 1) * 100 + 0), INTERVAL 1 DAY) AS week_start,
SUM(amount) AS total_sales
FROM
sales
GROUP BY
YEARWEEK(sale_date, 1)
ORDER BY
year_week;
このクエリでは、YEARWEEK関数の結果を日付に変換し、週の開始日(月曜日)を取得しています。
まとめ
YEARWEEKを使用することで、MySQLで売上データを簡単に週ごとにグループ化できます。
この方法は、週次レポートの作成や時系列分析に非常に有用です。
より複雑な分析や可視化が必要な場合は、この基本的なクエリを拡張したり、結果をビジネスインテリジェンスツールに渡したりすることで、さらに深い洞察を得ることができます。