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


290

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

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

Ответы:


528

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

Например:

SELECT GREATEST(2,1);

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


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

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))
Шон Бин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.