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

MySQLで同じ日付ごとに列の値を合計する方法|SUM()とGROUP BYの使い方

MySQLで「同じ日付のレコードに含まれる数値を合計したい」というケースはよくあります。例えば、購入日ごとの商品数量を集計したい場合などが該当します。

このような処理を行うには、集計関数 SUM()GROUP BY 句と組み合わせて使用します。ここでは、実際にテーブルを作成し、日付ごとに値を合計する手順を順番に見ていきましょう。

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

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

mysql> create table DemoTable1522
    -> (
    -> ProductPurchaseDate date,
    -> NumberOfProduct int
    -> );
Query OK, 0 rows affected (1.51 sec)

2. レコードの挿入

次に、INSERT文を使ってサンプルデータを登録します。同じ日付(2019-01-21)のレコードを複数件含めているのがポイントです。

mysql> insert into DemoTable1522 values('2019-01-21',45);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1522 values('2018-12-31',78);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1522 values('2019-01-21',67);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1522 values('2019-03-01',56);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1522 values('2018-01-21',97);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1522 values('2019-01-21',47);
Query OK, 1 row affected (0.15 sec)

3. 登録データの確認

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

mysql> select * from DemoTable1522;

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

+---------------------+-----------------+
| ProductPurchaseDate | NumberOfProduct |
+---------------------+-----------------+
| 2019-01-21          |              45 |
| 2018-12-31          |              78 |
| 2019-01-21          |              67 |
| 2019-03-01          |              56 |
| 2018-01-21          |              97 |
| 2019-01-21          |              47 |
+---------------------+-----------------+
6 rows in set (0.00 sec)

このように、「2019-01-21」の日付を持つレコードが3件存在していることが確認できます。

4. 日付ごとに値を合計するクエリ

それでは本題です。日付ごとに商品数を合計するには、次のように SUM() 関数と GROUP BY 句を使用します。

mysql> select ProductPurchaseDate,sum(NumberOfProduct) from DemoTable1522
    -> group by ProductPurchaseDate;

実行すると、以下のような結果が得られます。

+---------------------+----------------------+
| ProductPurchaseDate | sum(NumberOfProduct) |
+---------------------+----------------------+
| 2019-01-21          |                  159 |
| 2018-12-31          |                   78 |
| 2019-03-01          |                   56 |
| 2018-01-21          |                   97 |
+---------------------+----------------------+
4 rows in set (0.00 sec)

結果のポイント

注目すべきは「2019-01-21」の行です。元のテーブルでは 45・67・47 の3件に分かれていましたが、GROUP BYによって同一日付のレコードがグループ化され、その合計値である 159 が表示されています。

このように、SUM() + GROUP BY の組み合わせを使えば、日付単位だけでなく、月別・年別・カテゴリ別など、あらゆる単位での集計が簡単に行えます。売上レポートや在庫管理など、実務でのデータ集計において非常に役立つ基本テクニックなので、ぜひ覚えておきましょう。

  1. MySQLで重複レコードの値をSUM関数とGROUP BYで合計する方法

    MySQLでは、GROUP BY句とSUM関数を組み合わせることで、重複しているレコードの値をグループごとにまとめて合計できます。この記事では、学生名ごとに点数を集計する具体例を通して、その手順をわかりやすく解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> StudentName varchar(20), -> StudentMarks int -> );Query OK, 0 rows affected (0.68 sec)ここでは、学生名を

  2. MySQLでカスタム列に複数の値を設定する方法|UNION ALLの使い方を実例で解説

    はじめにMySQLでカスタム列(計算結果を出力する列)に複数の値を持たせたい場合、UNION ALLを利用すると簡単に実現できます。本記事では、実際にテーブルを作成し、UNION ALLを使って1つの列から複数の計算結果を取得する手順を、サンプルコードと実行結果あわせて詳しく解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1987 ( UserValue int ); Query OK, 0 rows affected (2.90 sec)レコードの挿入INSERT文を使って、