1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQL データを週ごとにグループ化する方法

Posted at

はじめに

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;

このクエリは以下のことを行います:

  1. YEARWEEK関数で売上日を年週に変換
  2. GROUP BY句で年週ごとにグループ化
  3. SUM関数で各週の売上合計を計算
  4. 結果を年週順にソート

結果の解釈

クエリの結果は次のようになります:

+----------+-------------+
| 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で売上データを簡単に週ごとにグループ化できます。
この方法は、週次レポートの作成や時系列分析に非常に有用です。

より複雑な分析や可視化が必要な場合は、この基本的なクエリを拡張したり、結果をビジネスインテリジェンスツールに渡したりすることで、さらに深い洞察を得ることができます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?