MySQLで最小価格(PRICE)を共有する複数の書籍タイトルを取得する方法
MySQLでテーブル内の最小値を求めるには MIN() 関数を使用します。さらに、サブクエリと組み合わせることで、その最小値を共有する複数のレコードを一度に抽出できます。ここでは、「最も安い価格の書籍タイトルをすべて取得する」というケースを例に、具体的な手順を解説します。
1. サンプルテーブルの作成
まず、書籍タイトルと価格を格納するテーブルを作成します。
mysql> create table DemoTable1414
-> (
-> BookTitle varchar(40),
-> BookPrice int
-> );
Query OK, 0 rows affected (0.82 sec)2. レコードの挿入
次に、INSERT文を使ってサンプルデータを登録します。あえて同じ価格(360円)を持つ書籍を2冊含めている点に注目してください。
mysql> insert into DemoTable1414 values('Deep dive using java',560);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1414 values('C++ in depth',360);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1414 values('Data structure in C',590);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1414 values('Algorithm in C++',1090);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1414 values('Java in Depth',360);
Query OK, 1 row affected (0.33 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select * from DemoTable1414;
実行結果は以下の通りです。
+----------------------+-----------+ | BookTitle | BookPrice | +----------------------+-----------+ | Deep dive using java | 560 | | C++ in depth | 360 | | Data structure in C | 590 | | Algorithm in C++ | 1090 | | Java in Depth | 360 | +----------------------+-----------+ 5 rows in set (0.00 sec)
4. 最小価格を共有する書籍タイトルを取得するクエリ
最小価格を共有する複数の書籍タイトルを取得するには、WHERE句の中でサブクエリを使って MIN(BookPrice) を求め、それと一致する行を絞り込みます。
mysql> select BookTitle from DemoTable1414
-> where BookPrice= ( select min(BookPrice) from DemoTable1414);実行結果は以下の通りです。
+---------------+ | BookTitle | +---------------+ | C++ in depth | | Java in Depth | +---------------+ 2 rows in set (0.00 sec)
ポイント解説
このクエリでは、サブクエリ (select min(BookPrice) from DemoTable1414) が先に実行され、テーブル全体の最小価格である「360」が返されます。その後、外側のクエリが BookPrice = 360 に一致するすべての行を抽出するため、最小価格を共有する「C++ in depth」と「Java in Depth」の2件が同時に取得できる仕組みです。
なお、GROUP BYを使用した集計クエリでも同様の結果は得られますが、この方法はシンプルで可読性が高く、最小値に該当する全レコードを確実に取得できるため実務でも広く使われています。
-
MySQLで列が複数の値をすべて満たす行を選択する方法|GROUP BY・HAVING句の使い方
MySQLである列が「複数の値をすべて満たしている」行だけを抽出したい場合、IN()句と GROUP BY、そして HAVING 句を組み合わせることで実現できます。この記事では、具体的なサンプルを使いながら手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここでは氏名(FirstName)と科目(Subject)を持つシンプルなテーブルを用意しました。mysql> create table DemoTable1885 ( FirstName varchar(20), Subject varchar(50)
-
MySQLで特定の値より大きいレコードだけを抽出する方法|WHERE句を使った条件指定の基本
MySQLで特定の値以下のレコードを除外するには? MySQLである値を基準に、それより小さいレコードを除外し、大きい値を持つレコードだけを取得したい場合は、WHERE句に比較演算子「>(より大きい)」を組み合わせるのが基本です。 基本構文 SELECT * FROM テーブル名 WHERE カラム名 > 値; この構文により、指定したカラムの値が条件値より大きい行のみが結果セットとして返されます。 実際に試してみよう:サンプルテーブルの作成 まずは動作を確認するためのテーブルを作成します。 mysql> create table demo27 -> ( ->