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

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()など他の集計関数にも応用できるので、あわせて覚えておくと便利です。

  1. MySQLで重複するIDごとに各列の最大値を取得する方法(GROUP BYとMAX関数の活用)

    テーブル内に同じIDが複数行存在する場合、それらをグループ化して各列の最大値をまとめて取得したいケースはよくあります。このような場合には、GROUP BY句とMAX()関数を組み合わせることで簡単に実現できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。ここでは、学生IDと3科目の点数(Marks1〜Marks3)を格納するテーブルを例にします。 mysql> create table DemoTable1804      (      Id int,      Mark

  2. MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説

    MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。基本構文重複IDごとの最小値を取得するには、以下のような構文を使用します。select min(対象カラム名) from テーブル名 group by グループ化するカラム名;サンプルテーブルの作成実際に動作を確認するため、まずはテーブルを作成しましょう。mysql> create table DemoTabl