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

MySQLで2つ以上のカラムから最大値を取得する方法(GREATEST関数の使い方)

はじめに

MySQLで2つ以上のカラム(フィールド)の中から最大の値を取得したい場合には、GREATEST() 関数を使用します。この関数は、引数として渡された複数の値の中から最も大きい値を1つ返してくれます。

GREATEST() の基本構文

構文は以下のとおりです。

SELECT GREATEST(MAX(yourColumnName1), MAX(yourColumnName2), ... ) FROM yourTableName;

各カラムに対して MAX() を適用し、その結果を GREATEST() に渡すことで、テーブル全体の中で最も大きな値を取得できます。

サンプルテーブルの作成

それでは、3つのカラムを持つテーブルを作成して、実際に動作を確認してみましょう。

mysql> create table GreatestOfTwoOrMore
-> (
-> Marks1 int,
-> Marks2 int,
-> Marks3 int
-> );
Query OK, 0 rows affected (0.57 sec)

レコードの挿入

次に、作成したテーブルへサンプルデータを挿入します。

mysql> insert into GreatestOfTwoOrMore values(23,78,89);
Query OK, 1 row affected (0.16 sec)

mysql> insert into GreatestOfTwoOrMore values(50,100,150);
Query OK, 1 row affected (0.24 sec)

mysql> insert into GreatestOfTwoOrMore values(100,500,2000);
Query OK, 1 row affected (0.15 sec)

データの確認

以下のクエリで、挿入したすべてのデータを表示できます。

mysql> select *from GreatestOfTwoOrMore;

実行結果は次のとおりです。

+--------+--------+--------+
| Marks1 | Marks2 | Marks3 |
+--------+--------+--------+
| 23 | 78 | 89 |
| 50 | 100 | 150 |
| 100 | 500 | 2000 |
+--------+--------+--------+
3 rows in set (0.00 sec)

2つ以上のカラムから最大値を取得する

ここまで準備ができたら、GREATEST() 関数を使って、3つのカラム全体の中から最大値を取得してみましょう。実行するクエリは以下のとおりです。

mysql> SELECT GREATEST(MAX(marks1),MAX(marks2),MAX(marks3)) from GreatestOfTwoOrMore;

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

+-----------------------------------------------+
| GREATEST(MAX(marks1),MAX(marks2),MAX(marks3)) |
+-----------------------------------------------+
| 2000 |
+-----------------------------------------------+
1 row in set (0.06 sec)

解説

この結果から、各カラムの最大値はそれぞれ 100(Marks1)、500(Marks2)、2000(Marks3) であり、その中で最も大きい 2000 が返されていることがわかります。

補足:注意点

  • GREATEST() に渡す引数のいずれかひとつでも NULL が含まれる場合、結果は NULL になります。NULL を除外したい場合は COALESCE()IFNULL() を組み合わせると便利です。
  • 行ごとの最大値を取得したい場合も同じ GREATEST() 関数を使えますが、その場合は MAX() を付けずに SELECT GREATEST(Marks1, Marks2, Marks3) FROM テーブル名; のように記述します。

まとめ

MySQLで複数のカラムから最大値を取得するには、MAX()GREATEST() を組み合わせるのが簡単で効果的です。集計処理やランキング機能の実装など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。

  1. MySQLで列の値から末尾の2文字を削除するクエリの書き方

    MySQLではLEFT()関数を使うことで、文字列の先頭から指定した文字数だけを取り出すことができます。この関数とLENGTH()関数を組み合わせれば、テーブル内のすべての列の値から末尾の2文字を簡単に削除できます。 まずは、動作を確認するためのサンプルテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Name varchar(10) -> ); Query OK, 0 rows affected (0.71 sec) 次に、INSERT文を使ってレコードを挿入します。 mysql> i

  2. MySQLで重複するIDごとに各列の最大値を取得する方法(GROUP BYとMAX関数の活用)

    テーブル内に同じIDが複数行存在する場合、それらをグループ化して各列の最大値をまとめて取得したいケースはよくあります。このような場合には、GROUP BY句とMAX()関数を組み合わせることで簡単に実現できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。ここでは、学生IDと3科目の点数(Marks1〜Marks3)を格納するテーブルを例にします。 mysql> create table DemoTable1804      (      Id int,      Mark