MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで月ごとにテーブルの合計値を集計する方法

MySQLで日付データを月単位にグループ化して合計値を求めたい場合、GROUP BY句とMONTH()関数を組み合わせることで簡単に実現できます。この記事では、実際のサンプルを使いながら手順を詳しく解説します。

1. サンプルテーブルの作成

まず、購入日と金額を格納するテーブルを作成します。

mysql> create table DemoTable1628
    -> (
    -> PurchaseDate date,
    -> Amount int
    -> );
Query OK, 0 rows affected (1.55 sec)

2. テストデータの挿入

次に、INSERT文を使って複数のレコードを登録します。意図的に同じ月(10月)のデータを複数件入れている点に注目してください。

mysql> insert into DemoTable1628 values('2019-01-10',1500);
Query OK, 1 row affected (0.68 sec)
mysql> insert into DemoTable1628 values('2019-10-10',2000);
Query OK, 1 row affected (0.61 sec)
mysql> insert into DemoTable1628 values('2019-10-24',100);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1628 values('2019-11-10',500);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1628 values('2019-12-10',1600);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable1628 values('2019-10-10',900);
Query OK, 1 row affected (0.47 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1628;

実行結果は以下の通りです。

+--------------+--------+
| PurchaseDate | Amount |
+--------------+--------+
| 2019-01-10   |   1500 |
| 2019-10-10   |   2000 |
| 2019-10-24   |    100 |
| 2019-11-10   |    500 |
| 2019-12-10   |   1600 |
| 2019-10-10   |    900 |
+--------------+--------+
6 rows in set (0.00 sec)

4. 月ごとの合計を取得するクエリ

ここが本題です。MONTH()関数で月を抽出し、SUM()関数で金額を合計します。年も併せて表示すると、結果がより分かりやすくなります。

mysql> select month(PurchaseDate) as Month,year(PurchaseDate) as Year,SUM(Amount)
    -> from DemoTable1628
    -> group by month(PurchaseDate);

実行結果は以下のようになります。

+-------+------+-------------+
| Month | Year | SUM(Amount) |
+-------+------+-------------+
|     1 | 2019 |        1500 |
|    10 | 2019 |        3000 |
|    11 | 2019 |         500 |
|    12 | 2019 |        1600 |
+-------+------+-------------+
4 rows in set (0.20 sec)

ポイント解説

10月のレコードは3件(2000 + 100 + 900)あり、正しく「3000」という合計値に集計されていることが確認できます。

なお、より厳密にはGROUP BY句にもyear(PurchaseDate)を含めておくのが安全です。そうすることで、異なる年の同じ月(例:2019年10月と2020年10月)が誤って同じグループにまとめられることを防げます。

select month(PurchaseDate) as Month,
       year(PurchaseDate) as Year,
       SUM(Amount) as Total
from DemoTable1628
group by year(PurchaseDate), month(PurchaseDate);

このようにGROUP BY MONTH()を使えば、売上やアクセス数などの時系列データを月単位で簡単に集計でき、レポート作成やダッシュボード表示など幅広い場面で活用できます。

  1. MySQLで条件に基づいてテーブルから一部の行のみを削除する方法

    MySQLで条件に基づいてテーブルから一部の行のみを削除する方法MySQLでは、DELETE文とWHERE句を組み合わせることで、テーブルから条件に合致する行だけを選択的に削除できます。WHERE句を指定しないとテーブル内のすべての行が削除されてしまうため、条件の指定は非常に重要です。ここでは、実際の例を使って手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query O

  2. MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方

    MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec