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 (0.65 sec)
2. テーブルにレコードを挿入する
次に、INSERT文を使っていくつかのレコードを挿入します。意図的に同じ顧客IDを複数回登録している点に注目してください。
mysql> insert into DemoTable2003 values(101,560);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable2003 values(102,1080);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2003 values(101,570);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable2003 values(102,870);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable2003 values(101,460);
Query OK, 1 row affected (0.12 sec)
3. 登録されたレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable2003;
実行結果は以下の通りです。
+------------+--------+
| CustomerId | Amount |
+------------+--------+
| 101 | 560 |
| 102 | 1080 |
| 101 | 570 |
| 102 | 870 |
| 101 | 460 |
+------------+--------+
5 rows in set (0.00 sec)
顧客ID「101」と「102」がそれぞれ複数件登録されていることがわかります。
4. 重複IDごとに最大金額を取得する
ここからが本題です。重複する顧客IDごとに最大の金額を表示するには、GROUP BY句で顧客IDごとにグループ化し、MAX()関数で金額の最大値を取得します。
mysql> select CustomerId, max(Amount) from DemoTable2003
group by CustomerId;
実行結果は以下の通りです。
+------------+-------------+
| CustomerId | max(Amount) |
+------------+-------------+
| 101 | 570 |
| 102 | 1080 |
+------------+-------------+
2 rows in set (0.00 sec)
結果の解説
顧客ID「101」のレコードは560・570・460の3件あるため、その中で最も大きい570が表示されています。同様に、顧客ID「102」では1080と870のうち大きい方の1080が出力されます。このように、GROUP BYでグループ化した列に対してMAX()などの集計関数を組み合わせることで、グループごとの最大値を簡単に求められます。
まとめ
重複するIDごとの最大値を取得するには、「SELECT グループ化する列, MAX(集計対象列) FROM テーブル名 GROUP BY グループ化する列」という形式を使います。同じ考え方はMIN()やSUM()、AVG()など他の集計関数にも応用できるので、あわせて覚えておくと便利です。
-
MySQLで重複するIDごとに各列の最大値を取得する方法(GROUP BYとMAX関数の活用)
テーブル内に同じIDが複数行存在する場合、それらをグループ化して各列の最大値をまとめて取得したいケースはよくあります。このような場合には、GROUP BY句とMAX()関数を組み合わせることで簡単に実現できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。ここでは、学生IDと3科目の点数(Marks1〜Marks3)を格納するテーブルを例にします。 mysql> create table DemoTable1804 ( Id int, Mark
-
MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説
MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。基本構文重複IDごとの最小値を取得するには、以下のような構文を使用します。select min(対象カラム名) from テーブル名 group by グループ化するカラム名;サンプルテーブルの作成実際に動作を確認するため、まずはテーブルを作成しましょう。mysql> create table DemoTabl