MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説
MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。
基本構文
重複IDごとの最小値を取得するには、以下のような構文を使用します。
select min(対象カラム名) from テーブル名 group by グループ化するカラム名;
サンプルテーブルの作成
実際に動作を確認するため、まずはテーブルを作成しましょう。
mysql> create table DemoTable2005
(
Id int,
Price float
);
Query OK, 0 rows affected (0.71 sec)ここでは、Id(int型)とPrice(float型)の2つのカラムを持つテーブル「DemoTable2005」を作成しました。
レコードの挿入
次に、INSERTコマンドを使ってテストデータを挿入します。意図的に同じId(重複ID)を持つレコードを登録している点に注目してください。
mysql> insert into DemoTable2005 values(1,56.88); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable2005 values(1,120.56); Query OK, 1 row affected (0.23 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable2005;
実行結果は以下の通りです。
+------+--------+ | Id | Price | +------+--------+ | 1 | 56.88 | | 1 | 120.56 | +------+--------+ 2 rows in set (0.00 sec)
このように、Id「1」に対してPrice「56.88」と「120.56」の2件のレコードが登録されています。
重複IDごとに最小値を取得するクエリ
それでは本題です。重複するIdに対応するPrice列の中から最小値を取得するには、次のようにMIN()関数とGROUP BY句を組み合わせます。
mysql> select min(Price) from DemoTable2005 group by Id;
実行結果
+------------+ | min(Price) | +------------+ | 56.88 | +------------+ 1 row in set (0.00 sec)
結果として、Id「1」に紐づくPriceの最小値である「56.88」が返されました。
まとめ
- GROUP BY句でグループ化したいカラム(今回の場合はId)を指定する
- MIN()関数で最小値を求めたいカラム(今回はPrice)を囲む
- これにより、重複IDごとに最小値を一括して取得できる
なお、MIN()をMAX()に置き換えれば最大値を、AVG()にすれば平均値を同様の方法で取得できます。また、実務では「SELECT Id, min(Price)」のようにId自体も一緒に選択すると、どのIDの最小値なのかが分かりやすくなり便利です。状況に応じて活用してみてください。
-
MySQLでGROUP BYとMIN()を使い、重複する値を持つ列ごとにタイムスタンプから最初の日付を取得する方法
このようなケースでは、集計関数 MIN() と GROUP BY 句を組み合わせることで簡単に実現できます。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1870 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Value int, ShippingTimestamp varchar(100) ); Query OK, 0 rows affected (0.00 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは、同じ
-
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