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

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」と計算され、重複するレコードが正しく集計されていることがわかります。売上データの集計や在庫数の合計など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。

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

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

  2. 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