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

MySQLで重複する列の値ごとに最小値を含む行を取得する方法

この記事では、MySQLにおいて重複する値を持つ列(ここでは「Class」)ごとに、別の列(「Amount」)の最小値を取得する方法を解説します。GROUP BY句MIN()関数を組み合わせることで、カテゴリ別の最小値を簡単かつ効率的に抽出できます。

1. サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable1875
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Class varchar(20),
    Amount int
   );
Query OK, 0 rows affected (0.00 sec)

このテーブルには、自動採番される主キー「Id」と、クラス名を格納する「Class」、数値を格納する「Amount」の3つの列が定義されています。

2. レコードの挿入

次に、INSERTコマンドを使用してテーブルにデータを挿入します。

mysql> insert into DemoTable1875(Class,Amount) values('X',750);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1875(Class,Amount) values('X',140);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1875(Class,Amount) values('X',450);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1875(Class,Amount) values('Y',6780);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1875(Class,Amount) values('Z',1350);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1875(Class,Amount) values('Z',2050);
Query OK, 1 row affected (0.00 sec)

クラス「X」に3件、「Y」に1件、「Z」に2件のレコードが登録されました。

3. テーブル内の全レコードを表示

SELECT文を使って、登録されたすべてのレコードを確認してみましょう。

mysql> select * from DemoTable1875;

上記のクエリを実行すると、次のような結果が出力されます。

+----+-------+--------+
| Id | Class | Amount |
+----+-------+--------+
|  1 | X     |     750 |
|  2 | X     |     140 |
|  3 | X     |     450 |
|  4 | Y     |    6780 |
|  5 | Z     |    1350 |
|  6 | Z     |    2050 |
+----+-------+--------+
6 rows in set (0.00 sec)

4. グループごとの最小値を取得するクエリ

それでは本題です。ClassごとにAmountの最小値を選択するには、GROUP BY句でClass列をグループ化し、MIN()関数で各グループの最小値を取得します。

mysql> select Class,Min(Amount) from DemoTable1875 group by Class;

実行結果は以下の通りです。

+-------+-------------+
| Class | Min(Amount) |
+-------+-------------+
| X     |         140 |
| Y     |        6780 |
| Z     |        1350 |
+-------+-------------+
3 rows in set (0.00 sec)

結果の解説

この出力から、以下のことが読み取れます。

  • クラス「X」の最小値は 140
  • クラス「Y」の最小値は 6780(レコードが1件のみのため、その値がそのまま最小値になります)
  • クラス「Z」の最小値は 1350

このように、GROUP BY句とMIN()関数を組み合わせることで、重複する値を持つ列を基準に、各グループの最小値をシンプルなクエリで抽出できます。なお、最小値に対応する行の他の列(例えばIdなど)も一緒に取得したい場合は、相関サブクエリや自己結合(JOIN)を利用する方法もありますので、用途に応じて使い分けるとよいでしょう。

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

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

  2. MySQLで値が「0」の場合に別の列から値を取得する方法

    MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー