Как получить максимум двух значений в MySQL?

290

Я пытался, но не получилось:

mysql> select max(1,0);
ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверить руководство
что соответствует вашей версии сервера MySQL для правильного использования синтаксиса 
около '0)' в строке 1
маскировать
источник

Ответы:

528

Используйте БОЛЬШОЙ ()

Например:

SELECT GREATEST(2,1);

Примечание: всякий раз, когда какое-либо одно значение содержит ноль в то время, эта функция всегда возвращает ноль (спасибо user @ sanghavi7)

NinethSense
источник
41
Необходимо помнить одну вещь: всякий раз, когда какое-либо одно значение содержит нуль в это время, эта функция всегда возвращает ноль в качестве ответа!
sanghavi7
33
Существует такжеLEAST
Бобобобо
1
Как я могу запустить вспомогательный запрос в качестве параметра , GREATESTтак что я могу получить значения для cirtain колонки
Junaid Кадир
17
Для предотвращения проблемы с нулем вы можете использовать ifnull. Например, select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;вы получите дату1.
Кристоф Гриммер-Дитрих
1
Если некоторые значения могут быть нулевыми, вы можете сделатьGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Шон Боб
27

Чтобы получить максимальное значение столбца в наборе строк:

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

Чтобы получить максимальное значение набора столбцов, литералов или переменных для каждой строки:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
источник
3
Следите за нулевыми значениями с GREATEST. Любое нулевое значение приведет к тому, что функция вернет нулевое значение. Чтобы предотвратить это, вы можете сделатьGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Шон Боб
5

Вы можете использовать функцию 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. Какой огромный объем работы, чтобы сделать такую ​​простую вещь.
Моника Хедднек
9
Это можно просто заменить на select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Это слишком сложно
сложно
1
Если некоторые значения могут быть нулевыми, вы можете сделатьGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Шон Бин