MySQLで2つの値の最大値を取得する方法は?


289

私は試しましたが失敗しました:

mysql> select max(1,0);
エラー1064(42000):SQL構文にエラーがあります。マニュアルを確認する
使用する正しい構文のMySQLサーバーのバージョンに対応 
1行目の「0)」の近く

回答:


527

GREATEST()を使用します

例えば:

SELECT GREATEST(2,1);

注:その時点でいずれかの単一の値にnullが含まれている場合、この関数は常にnullを返します(ユーザー@ sanghavi7に感謝)


41
単一の値にnullが含まれている場合、この関数は常に答えとしてnullを返すことに注意してください。
sanghavi7 2013年

33
またありますLEAST
bobobobo 2013

1
GREATEST特定の列の値を取得できるように、サブクエリをパラメーターとして実行するには
Qadir

17
nullの問題を回避するには、ifnullを使用できます。たとえば、select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;date1を取得します。
Christoph Grimmer-Dietrich

1
一部の値がnullの可能性がある場合は、次のことが可能ですGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

27

行のセット全体で列の最大値を取得するには:

SELECT MAX(column1) FROM table; -- expect one result

各行の列、リテラル、または変数のセットの最大値を取得するには:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results

3
でnull値に注意してくださいGREATEST。null値があると、関数はnullを返します。これを防ぐには、次のようにしますGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

5

NULL可能ではないフィールドでGREATEST関数を使用できます。この値のいずれか(または両方)がNULLになる可能性がある場合は、使用しないでください(結果はNULLになる可能性があります)。

select 
    if(
        fieldA is NULL, 
        if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
        if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
    ) as maxValue

NULLを好みのデフォルト値に変更できます(両方の値がNULLの場合)。


1
これが私が正直にMySQLを嫌う理由です。こんなに簡単なことをするのになんと途方もない量の仕事。
モニカヘドネック2017

9
これは単にに置き換えることができますselect COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue。複雑すぎる
キボレク

1
一部の値がnullになる可能性がある場合は、次のようにできますGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.