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

【MySQL】単一のクエリで2つのテーブルの最高値と最低値を取得する方法

2つのテーブルの中から最高値と最低値を取得するには、MAX()関数MIN()関数を使用します。さらに、複数のテーブルの結果をひとつにまとめて扱う必要があるため、UNION演算子も併用します。この記事では、実際のサンプルコードを使いながら、手順をわかりやすく解説します。

1つ目のテーブル(DemoTable1)を作成する

まず、CREATE TABLE文でサンプル用のテーブルを作成します。

mysql> create table DemoTable1
(
    UniqueId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Score1 int
);
Query OK, 0 rows affected (0.76 sec)

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable1(Score1) values(56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1(Score1) values(76);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1(Score1) values(65);
Query OK, 1 row affected (0.09 sec)

SELECT文でテーブル内のすべてのレコードを確認しましょう。

mysql> select *from DemoTable1;

実行すると、次のような出力が得られます。

+----------+--------+
| UniqueId | Score1 |
+----------+--------+
|        1 |     56 |
|        2 |     76 |
|        3 |     65 |
+----------+--------+
3 rows in set (0.00 sec)

2つ目のテーブル(DemoTable2)を作成する

続いて、2つ目のテーブルを作成します。

mysql> create table DemoTable2
(
    UniqueId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Score2 int
);
Query OK, 0 rows affected (0.93 sec)

同じようにINSERT文でレコードを挿入します。

mysql> insert into DemoTable2(Score2) values(67);
Query OK, 1 row affected (0.68 sec)
mysql> insert into DemoTable2(Score2) values(94);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable2(Score2) values(98);
Query OK, 1 row affected (0.08 sec)

SELECT文でレコードを確認します。

mysql> select *from DemoTable2;

出力は以下の通りです。

+----------+--------+
| UniqueId | Score2 |
+----------+--------+
|        1 |     67 |
|        2 |     94 |
|        3 |     98 |
+----------+--------+
3 rows in set (0.00 sec)

2つのテーブルから最高値と最低値を取得するクエリ

ポイントは、UNIONで2つのテーブルのスコアを統合したサブクエリ(派生テーブル)を作り、その結果全体に対してMAX()とMIN()を適用することです。これにより、単一のクエリで両テーブルを横断した最高値と最低値を一度に取得できます。

mysql> select max(commonValue) AS Highest_Value,min(commonValue) AS Lowest_Value from
(
    select Score1 as commonValue from DemoTable1
    union
    select Score2 as commonValue from DemoTable2
) tbl;

実行結果は次のようになります。

+---------------+--------------+
| Highest_Value | Lowest_Value |
+---------------+--------------+
|            98 |           56 |
+---------------+--------------+
1 row in set (0.04 sec)

この出力から、DemoTable1とDemoTable2を合わせたデータの中で、最高値が「98」、最低値が「56」であることが確認できます。AS句を使って別名(Highest_Value/Lowest_Value)を付けているため、結果の列も読みやすく表示されます。

補足:UNIONとUNION ALLの違い

UNIONは重複する値を自動的に除外して統合します。重複行も含めて扱いたい場合はUNION ALLを使用します。ただし、MAX()やMIN()は重複値の有無に関わらず同じ最大値・最小値を返すため、本記事のような用途ではどちらを使っても結果は変わりません。

  1. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks

  2. MySQLで重複するタプルを検出してカウントを表示する方法

    MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入