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

MySQLで2つのテーブルの列から最大値(MAX)を取得する方法

MySQLでは、GREATEST()関数を使うことで、複数の値の中から最大値を簡単に取得できます。この記事では、2つの異なるテーブルの列それぞれに対して最大値(MAX)を求め、さらにその中から最大の値を取得する方法を解説します。

1. 最初のテーブルを作成する

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1
   (
   Number int
   );
Query OK, 0 rows affected (0.52 sec)

レコードの挿入

INSERTコマンドを使って、いくつかのレコードを追加します。

mysql> insert into DemoTable1 values(80);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1 values(229);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1 values(575);
Query OK, 1 row affected (0.24 sec)

レコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable1;

出力結果

+--------+
| Number |
+--------+
| 80     |
| 229    |
| 575    |
+--------+
3 rows in set (0.00 sec)

2. 2つ目のテーブルを作成する

続いて、比較対象となる2つ目のテーブルを作成します。

mysql> create table DemoTable2
   (
   Number int
   );
Query OK, 0 rows affected (0.51 sec)

レコードの挿入

こちらのテーブルにも、INSERTコマンドでレコードを追加します。

mysql> insert into DemoTable2 values(485);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable2 values(10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2 values(475);
Query OK, 1 row affected (0.12 sec)

レコードの確認

SELECT文で登録内容を確認しておきましょう。

mysql> select *from DemoTable2;

出力結果

+--------+
| Number |
+--------+
| 485    |
| 10     |
| 475    |
+--------+
3 rows in set (0.00 sec)

3. 2つのテーブルから最大値を取得するクエリ

それでは本題です。各テーブルのNumber列に対してMAX()をサブクエリで取得し、その結果をGREATEST()関数に渡すことで、2つのテーブル全体の中で最も大きい値を一度に取得できます。

mysql> select greatest((select max(Number) from DemoTable1),(select max(Number) from DemoTable2));

出力結果

+-----------------------------------------------------------------------------------------+
| greatest((select max(Number) from DemoTable1),(select max(Number) from DemoTable2))     |
+-----------------------------------------------------------------------------------------+
| 575                                                                                     |
+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

解説

上記のクエリでは、まず各サブクエリがそれぞれのテーブルの最大値を返します。DemoTable1の最大値は「575」、DemoTable2の最大値は「485」です。そしてGREATEST()関数がこれら2つの値を比較し、より大きい方である「575」を最終的な結果として返しています。

このように、GREATEST()とサブクエリを組み合わせれば、UNIONなどを使わずにシンプルなクエリだけで複数テーブルにまたがる最大値を取得できます。3つ以上のテーブルを比較したい場合も、同様にサブクエリをカンマ区切りで追加していくだけで対応可能です。

  1. MySQLで2つのテーブルから共通するIDレコードを取得する方法

    MySQLでは、サブクエリとIN句を組み合わせることで、2つのテーブルに共通して存在するIDのレコードを簡単に取得できます。この記事では、実際にテーブルを作成し、データを挿入して、一致するレコードを抽出するまでの手順を解説します。 1つ目のテーブルを作成する まず、以下のクエリで1つ目のテーブル「DemoTable1」を作成します。 mysql> create table DemoTable1 ( Id int ); Query OK, 0 rows affected (1.26 sec) DemoTable1にデータを挿入する INSERTコマンドを使って、いくつかのレコードを

  2. MySQLで条件に基づいて列の合計(SUM)を取得する方法

    はじめに MySQLでは、SUM()関数とGROUP BY句を組み合わせることで、特定の条件に基づいて列の合計値を簡単に取得できます。この記事では、実際のサンプルコードを使って、テーブル作成から集計クエリの実行までの手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable1489 -> ( -> ProductId int, -> ProductPrice int -> ); Query OK, 0 rows affe