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

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

MySQLでテーブル内の値を月ごとに合計したい場合は、EXTRACT()関数を使用します。この関数を使うことで、日付から特定の月の情報を抽出できます。例えば、年に関係なく1月のすべての価格を合計したい場合などに便利です。

サンプルテーブルの作成

まず、デモ用のテーブルを作成しましょう。

mysql> create table DemoTable1415
    -> (
    -> ProductPurchaseDate date,
    -> ProductPrice int
    -> );
Query OK, 0 rows affected (0.53 sec)

テストデータの挿入

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable1415 values('2019-01-12',560);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1415 values('2018-01-14',1060);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1415 values('2017-03-21',780);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1415 values('2016-09-01',800);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1415 values('2019-01-14',100);
Query OK, 1 row affected (0.16 sec)

登録データの確認

SELECT文ですべてのレコードを表示して確認します。

mysql> select * from DemoTable1415;

実行すると、以下のような結果が出力されます。

+---------------------+--------------+
| ProductPurchaseDate | ProductPrice |
+---------------------+--------------+
| 2019-01-12          |          560 |
| 2018-01-14          |         1060 |
| 2017-03-21          |          780 |
| 2016-09-01          |          800 |
| 2019-01-14          |          100 |
+---------------------+--------------+
5 rows in set (0.00 sec)

月ごとに値を合計するクエリ

ここからが本題です。EXTRACT(MONTH FROM ...)で購入日から月を抽出し、それをGROUP BY句と組み合わせることで、月ごとの合計値を求めることができます。

mysql> select extract(MONTH from ProductPurchaseDate) as month,sum(ProductPrice) as total_value from DemoTable1415
    -> group by month;

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

+-------+-------------+
| month | total_value |
+-------+-------------+
|     1 |        1720 |
|     3 |         780 |
|     9 |         800 |
+-------+-------------+
3 rows in set (0.00 sec)

結果の解説

この出力を見ると、以下のことがわかります。

  • 1月:2019年・2018年の1月のレコード(560 + 1060 + 100)が合算され、合計1720
  • 3月:2017年3月のレコードのみで、合計780
  • 9月:2016年9月のレコードのみで、合計800

このようにEXTRACT()関数を使えば、年をまたいだデータでも同じ月の値をまとめて集計できます。なお、年ごとに分けて集計したい場合は、EXTRACT(YEAR FROM ...)もGROUP BYに追加するとよいでしょう。

  1. MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】

    MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889    (    DueDate date,    Amount int   

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ