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 の組み合わせを使えば、日付単位だけでなく、月別・年別・カテゴリ別など、あらゆる単位での集計が簡単に行えます。売上レポートや在庫管理など、実務でのデータ集計において非常に役立つ基本テクニックなので、ぜひ覚えておきましょう。
-
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)ここでは、学生名を
-
MySQLでカスタム列に複数の値を設定する方法|UNION ALLの使い方を実例で解説
はじめにMySQLでカスタム列(計算結果を出力する列)に複数の値を持たせたい場合、UNION ALLを利用すると簡単に実現できます。本記事では、実際にテーブルを作成し、UNION ALLを使って1つの列から複数の計算結果を取得する手順を、サンプルコードと実行結果あわせて詳しく解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1987 ( UserValue int ); Query OK, 0 rows affected (2.90 sec)レコードの挿入INSERT文を使って、