MySQLで特定カラムの最小値に一致するデータを取得する方法(MIN()関数の使い方)
MySQLでは、あるカラムが最小値を持つ行を抽出したい場合、集計関数 MIN() をサブクエリと組み合わせて使うのが一般的です。この記事では、基本的な構文から実際のテーブルを使った動作確認まで、手順を追ってわかりやすく解説します。
基本構文
最小値に一致するデータを選択するには、以下のような構文を使用します。WHERE句の中でサブクエリとしてMIN()を呼び出し、その結果と比較するのがポイントです。
SELECT * FROM yourTableName WHERE yourColumnName = (SELECT MIN(yourColumnName) FROM yourTableName);
まず外側のクエリがテーブルの各行を走査し、各行の値がサブクエリで求めた最小値と一致するかどうかを判定します。一致した行だけが結果セットとして返されます。
サンプルテーブルの作成
実際に動きを確認するため、商品情報を格納するテーブルを作成します。ProductId(商品ID)、ProductName(商品名)、ProductPrice(価格)の3つのカラムを持つシンプルな構成です。
mysql> create table MinValueDemo -> ( -> ProductId int, -> ProductName varchar(100), -> ProductPrice int -> ); Query OK, 0 rows affected (0.77 sec)
テストデータの挿入
次に、INSERT文を使って5件の商品データを登録します。
mysql> insert into MinValueDemo values(1,'product-1',4500); Query OK, 1 row affected (0.14 sec) mysql> insert into MinValueDemo values(2,'product-2',4340); Query OK, 1 row affected (0.22 sec) mysql> insert into MinValueDemo values(3,'product-3',4110); Query OK, 1 row affected (0.18 sec) mysql> insert into MinValueDemo values(4,'product-4',4344); Query OK, 1 row affected (0.16 sec) mysql> insert into MinValueDemo values(5,'product-5',4103); Query OK, 1 row affected (0.13 sec)
SELECT文ですべてのレコードを表示して、登録内容を確認しましょう。
mysql> select *from MinValueDemo;
実行結果は以下の通りです。ProductPriceには4103〜4500の範囲の値が入っています。
+-----------+-------------+--------------+ | ProductId | ProductName | ProductPrice | +-----------+-------------+--------------+ | 1 | product-1 | 4500 | | 2 | product-2 | 4340 | | 3 | product-3 | 4110 | | 4 | product-4 | 4344 | | 5 | product-5 | 4103 | +-----------+-------------+--------------+ 5 rows in set (0.00 sec)
最小値のレコードを抽出するクエリ
それでは、ProductPriceが最小値である行を取得してみます。WHERE句内のサブクエリでMIN(ProductPrice)を求め、それと等しい行だけを絞り込みます。
mysql> select *from MinValueDemo -> where ProductPrice=(select min(ProductPrice) from MinValueDemo);
実行すると、最も安い価格4103の商品だけが返されます。
+-----------+-------------+--------------+ | ProductId | ProductName | ProductPrice | +-----------+-------------+--------------+ | 5 | product-5 | 4103 | +-----------+-------------+--------------+ 1 row in set (0.08 sec)
補足:実務での注意点
- 同点の扱い: 最小値が複数の行に存在する場合、この方法では該当するすべての行が返されます。「最も安い商品が2つある」ようなケースでも漏れなく取得できます。
- NULLの扱い: MIN()関数はNULL値を無視して計算するため、対象カラムにNULLが含まれていても正しく最小値を求められます。
- パフォーマンス: 大規模なテーブルではサブクエリが毎回実行されるため、対象カラムにインデックスを作成しておくと高速化が期待できます。
- 代替手法: 「ORDER BY カラム名 ASC LIMIT 1」でも最小値の行を1件だけ取得できますが、同点のレコードがある場合はどれか1件しか返らない点に注意が必要です。
このように、MIN()関数とサブクエリを組み合わせることで、MySQLで最小値を持つレコードを簡単かつ確実に抽出できます。売上データの最低金額や在庫の最少数量など、さまざまな場面で応用できる基本テクニックなので、ぜひ覚えておきましょう。
-
MySQLでカラムのデフォルト値を設定する方法をわかりやすく解説
MySQLでは、DEFAULT句を使うことで、カラムにデフォルト値(初期値)を設定できます。レコード挿入時にそのカラムへ値が指定されなかった場合、自動的にデフォルト値が適用される仕組みです。本記事では、実際にテーブルを作成し、デフォルト値を設定して動作を確認するまでの手順を解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。ここでは「Age」というint型のカラムを持つシンプルなテーブルを用意します。mysql> create table DemoTable-> (-> Age int-> );Query OK, 0 rows affected (0.
-
MySQLでNULL値のデータを抽出するSELECTクエリの使い方
MySQLでNULL値が格納されたレコードを取得するには、WHERE句で「IS NULL」を使用します。NULLは通常の値とは異なる特殊な状態を表すため、「= NULL」という等号による比較は正しく動作しない点に注意が必要です。 サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable ( CustomerName varchar(100), CustomerCountryName varchar(100) ); Query OK, 0 rows affected (0.95 sec) テストデータの