MySQLで月ごとにデータを集約する必要がある場合があります。この記事では、MySQLで月ごとにグループ化するさまざまな方法を見ていきます。
MySQLで月ごとにグループ化する方法
date_formatを使用します 日付を月の値にフォーマットし、月ごとにグループ化する関数。
date_format関数の構文は次のとおりです。
date_format(value, format string)
上記の関数では、値をリテラル、別の関数または列名、およびこの値を変換する必要のある形式を指定する形式文字列として指定する必要があります。
日付文字列を月に変換する例を次に示します。
mysql> SELECT DATE_FORMAT("2020-06-15", "%M");
+---------------------------------+
| DATE_FORMAT("2020-06-15", "%M") |
+---------------------------------+
| June |
+---------------------------------+
テーブルsales(id、order_date、amount)があるとします。
mysql> create table sales(id int, order_date date, amount int);
mysql> insert into sales(id,order_date,amount)
values(1,'2020-10-01',150),
(2,'2020-10-10',100),
(3,'2020-11-05',250),
(4,'2020-11-15',150),
(5,'2020-12-01',350),
(6,'2020-12-21',250);
mysql> select * from sales;
+------+------------+--------+
| id | order_date | amount |
+------+------------+--------+
| 1 | 2020-10-01 | 150 |
| 2 | 2020-10-10 | 100 |
| 3 | 2020-11-05 | 250 |
| 4 | 2020-11-15 | 150 |
| 5 | 2020-12-01 | 350 |
| 6 | 2020-12-21 | 250 |
+------+------------+--------+ また読む:MySQLでNOTNULL制約を削除する方法
月の名前でグループ化
月の名前でグループ化するSQLクエリは次のとおりです。
mysql> select date_format(order_date, '%M'),sum(amount)
from sales
group by date_format(order_date, '%M');
+-------------------------------+-------------+
| date_format(order_date, '%M') | sum(amount) |
+-------------------------------+-------------+
| December | 600 |
| November | 400 |
| October | 250 |
+-------------------------------+-------------+
上記のSQLクエリでは、 date_format(order_date、“%M”)を使用します。 日付列を月名に変換し、 sumを使用します 売上高を合計する列。
月と年でグループ化
月と年でグループ化するSQLクエリは次のとおりです。
mysql> select date_format(order_date, '%M %Y'),sum(amount)
from sales
group by year(order_date),month(order_date);
+----------------------------------+-------------+
| date_format(order_date, '%M %Y') | sum(amount) |
+----------------------------------+-------------+
| October 2020 | 250 |
| November 2020 | 400 |
| December 2020 | 600 |
+----------------------------------+-------------+
上記のクエリでは、date_formatを使用して、日付列の値を月と年の名前に変換します。また、YEAR()関数とMONTH()関数を使用して、データが月と年の番号でグループ化および順序付けされていることを確認します。
上記のクエリで、 date_formatを使用する場合 group by句で機能する場合、MySQLはグループを時系列ではなくアルファベット順にソートします。以下を参照してください。
mysql> select date_format(order_date, '%M'),sum(amount)
from sales
group by date_format(order_date, '%M');
+-------------------------------+-------------+
| date_format(order_date, '%M') | sum(amount) |
+-------------------------------+-------------+
| December | 600 |
| November | 400 |
| October | 250 |
+-------------------------------+-------------+
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。