MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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に置き換えるだけで応用可能です。

  1. 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

  2. MySQLで条件に応じて同じ列の2つの値を連結する方法

    MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869     (     Id int,   &nb