1つのMySQLクエリで2つのテーブルの最大値から最小値を取得する方法
2つのテーブルそれぞれの最大値を比較し、その中から最小値を取得したい場合には、MySQLのUNIONを使用することで実現できます。まずはサンプル用のテーブルを作成しましょう。
最初のテーブルを作成する
CREATE TABLE文で最初のテーブルを作成します。
mysql> create table DemoTable1 -> ( -> Value int -> ); Query OK, 0 rows affected (0.48 sec)
INSERTコマンドを使ってレコードを挿入します。
mysql> insert into DemoTable1 values(60); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1 values(78); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1 values(57); Query OK, 1 row affected (0.08 sec)
SELECT文ですべてのレコードを表示して確認します。
mysql> select * from DemoTable1;
実行結果は以下のとおりです。
+-------+ | Value | +-------+ | 60 | | 78 | | 57 | +-------+ 3 rows in set (0.00 sec)
2つ目のテーブルを作成する
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable2 -> ( -> Value int -> ); Query OK, 0 rows affected (0.48 sec)
同様にINSERTコマンドでレコードを挿入します。
mysql> insert into DemoTable2 values(90); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(67); Query OK, 1 row affected (0.14 sec)
SELECT文でテーブルの内容を確認します。
mysql> select * from DemoTable2;
実行結果は以下のとおりです。
+-------+ | Value | +-------+ | 90 | | 67 | +-------+ 2 rows in set (0.00 sec)
2つのテーブルの最大値から最小値を取得するクエリ
各テーブルの最大値(MAX)をUNIONで結合したサブクエリに対してMIN関数を適用することで、目的の値を1つのクエリで取得できます。
mysql> select min(tbl.Value) as Value -> from -> ( -> select max(Value) as Value from DemoTable1 -> union -> select max(Value) as Value from DemoTable2 -> ) as tbl;
実行結果は以下のとおりです。
+-------+ | Value | +-------+ | 78 | +-------+ 1 row in set (0.04 sec)
クエリの仕組み
DemoTable1の最大値は78、DemoTable2の最大値は90です。UNIONによってこれら2つの値が1つの結果セットにまとめられ、外側のMIN関数がその中から最小値である78を返します。
この手法は拡張性も高く、対象テーブルが3つ以上になった場合でも、UNIONの行を追加するだけで同じ考え方で対応できます。また、逆に「最大値の中の最大値」や「最小値の中の最小値」を求めたい場合も、外側の集計関数をMAXやMINに置き換えるだけで応用可能です。
-
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 ); Que
-
MySQLで条件に応じて同じ列の2つの値を連結する方法
MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869 ( Id int, &nb