Як отримати максимум двох значень у MySQL?


290

Я спробував, але не вдалося:

mysql> select max(1,0);
ПОМИЛКА 1064 (42000): у вас є помилка у вашому синтаксисі SQL; перевірити посібник
що відповідає вашій версії сервера MySQL для правильного використання синтаксису 
біля рядка "0)" у рядку 1

Відповіді:


528

Використовуйте ВЕЛИКИЙ ()

Наприклад:

SELECT GREATEST(2,1);

Примітка. Кожен раз, якщо будь-яке одне значення містить null, то ця функція завжди повертає null (завдяки користувачеві @ sanghavi7)


41
потрібно пам’ятати, що коли що, якщо якесь одне значення містить нуль, то ця функція завжди повертає нуль як відповідь!
sanghavi7

33
Є такожLEAST
бобобобо

1
як я можу запустити GREATESTпідзапит як параметр для того, щоб я міг отримати значення для колонки в окрузі
Junaid

17
Щоб запобігти проблемі з null, ви можете використовувати 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))
Sean The Bean

27

Щоб отримати максимальне значення стовпця через набір рядків:

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

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

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

3
Слідкуйте за нульовими значеннями за допомогою GREATEST. Будь-яке значення нуля призведе до повернення функції null. Щоб цього не допустити, можна зробитиGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean The Bean

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.