【MySQL】単一のクエリで最小値と最大値を同時に取得する方法
MySQLでは、UNIONを活用することで、たった1つのクエリでテーブル内の最小値と最大値を同時に取得できます。MIN()関数とMAX()関数をサブクエリとして組み合わせるのがポイントです。ここでは、テーブルの作成からデータの挿入、実際のクエリ実行まで順番に解説します。
サンプルテーブルを作成する
まず、CREATE TABLE文でテーブルを作成します。
mysql> create table DemoTable
(
Price int
);
Query OK, 0 rows affected (0.57 sec)データを挿入する
続いて、INSERT文でいくつかのレコードを追加します。
mysql> insert into DemoTable values(88); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(98); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(120); Query OK, 1 row affected (0.12 sec)
登録されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-------+ | Price | +-------+ | 88 | | 100 | | 98 | | 120 | +-------+ 4 rows in set (0.00 sec)
単一クエリで最小値と最大値を取得する
以下のクエリを実行すると、1つのMySQLクエリで最小値と最大値の両方を取得できます。「最小値に一致する行」と「最大値に一致する行」をそれぞれSELECTで抽出し、UNIONで連結する仕組みです。
mysql> select Price from DemoTable where Price=(select min(Price) from DemoTable) UNION select Price from DemoTable where Price=(select max(Price) from DemoTable);
実行結果は以下の通りです。
+-------+ | Price | +-------+ | 88 | | 120 | +-------+ 2 rows in set (0.00 sec)
補足:もっとシンプルな書き方
WHERE句での絞り込みが不要であれば、次のようにMIN()とMAX()を直接SELECTする方法がより効率的でおすすめです。
mysql> select min(Price), max(Price) from DemoTable;
この場合、最小値と最大値が1行に並んで返されます。一方、UNION方式は「最小値や最大値を持つレコードそのもの」を抽出したい場合に役立ちます。用途に応じて使い分けるとよいでしょう。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
C++のSTLで配列の最大要素と最小要素を求める方法
本記事では、C++のSTL(標準テンプレートライブラリ)を使って、配列の中から最大要素と最小要素を簡単に求める方法を解説します。例えば、配列が [12, 45, 74, 32, 66, 96, 21, 32, 27] の場合、最大要素は 96、最小要素は 12 となります。C++では、<algorithm> ヘッダーに用意されている max_element() 関数と min_element() 関数を使用することで、それぞれ最大値と最小値を簡単に取得できます。これらの関数は、指定した範囲内の要素を走査し、最大(または最小)の要素へのイテレータを返します。そのため、戻り値を参照外し