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() を組み合わせるのが簡単で効果的です。集計処理やランキング機能の実装など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。
-
MySQLで列の値から末尾の2文字を削除するクエリの書き方
MySQLではLEFT()関数を使うことで、文字列の先頭から指定した文字数だけを取り出すことができます。この関数とLENGTH()関数を組み合わせれば、テーブル内のすべての列の値から末尾の2文字を簡単に削除できます。 まずは、動作を確認するためのサンプルテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Name varchar(10) -> ); Query OK, 0 rows affected (0.71 sec) 次に、INSERT文を使ってレコードを挿入します。 mysql> i
-
MySQLで重複するIDごとに各列の最大値を取得する方法(GROUP BYとMAX関数の活用)
テーブル内に同じIDが複数行存在する場合、それらをグループ化して各列の最大値をまとめて取得したいケースはよくあります。このような場合には、GROUP BY句とMAX()関数を組み合わせることで簡単に実現できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。ここでは、学生IDと3科目の点数(Marks1〜Marks3)を格納するテーブルを例にします。 mysql> create table DemoTable1804 ( Id int, Mark