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)
ここでは、学生名を格納するStudentName(varchar型)と、点数を格納するStudentMarks(int型)の2つのカラムを持つテーブル「DemoTable」を作成しました。
2. レコードの挿入
次に、INSERTコマンドを使ってレコードを登録します。意図的に同じ学生名のデータを複数件登録している点に注目してください。
mysql> insert into DemoTable values('Chris',50);
Query OK, 1 row affected (0.61 sec)
mysql> insert into DemoTable values('David',70);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('Chris',80);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('David',90);
Query OK, 1 row affected (0.24 sec)3. 登録したレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
実行結果は以下のとおりです。
+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris | 50 |
| David | 70 |
| Chris | 80 |
| David | 90 |
+-------------+--------------+
4 rows in set (0.00 sec)
「Chris」と「David」のデータがそれぞれ2件ずつ登録されており、重複した学生名のレコードが存在することが確認できます。
4. 重複レコードをSUMで集計するクエリ
ここからが本題です。学生名ごとに重複するレコードをグループ化し、点数の合計を求めるには、以下のクエリを実行します。
mysql> select StudentName,sum(StudentMarks) from DemoTable group by StudentName;
実行結果は以下のとおりです。
+-------------+-------------------+
| StudentName | sum(StudentMarks) |
+-------------+-------------------+
| Chris | 130 |
| David | 160 |
+-------------+-------------------+
2 rows in set (0.00 sec)
5. クエリの解説
このクエリのポイントは以下の2つです。
GROUP BY句: group by StudentNameを指定することで、同じ学生名のレコードが1つのグループにまとめられます。
SUM関数: sum(StudentMarks)により、各グループ内の点数がすべて合計されます。
その結果、Chrisの点数は「50 + 80 = 130」、Davidの点数は「70 + 90 = 160」と計算され、重複するレコードが正しく集計されていることがわかります。売上データの集計や在庫数の合計など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】
MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889 ( DueDate date, Amount int
-
MySQLで重複するIDごとに最大金額を表示する方法(MAX()とGROUP BYの使い方)
はじめに重複しているID(この例では顧客ID)ごとに最大の金額を表示したい場合、MAX()関数とGROUP BY句を組み合わせることで簡単に実現できます。この記事では、サンプルテーブルを作成し、実際にクエリを実行しながら手順を詳しく解説します。1. サンプルテーブルを作成するまず、顧客IDと金額を持つテーブルを作成します。mysql> create table DemoTable2003( CustomerId int, Amount int);Query OK, 0 rows affected