Функция MySQL MAX() для сравнения числовых значений в обновлении?

При обновлении строки я хочу иметь встроенную проверку для проверки некоторых границ. Большинство языков имеют функцию MAX(), чтобы вернуть максимум переданных аргументов, но MySQL, похоже, использует MAX() для чего-то другого. Например:

UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1

Я хочу вычесть 20 долларов от человека id 1, но я не хочу, чтобы доллары когда-либо были представлены отрицательным значением, поэтому я хочу иметь встроенное сравнение с 0. Это работает? Или есть другой способ? Спасибо!

Ответ 1

MySQL поддерживает функцию GREATEST(). Он возвращает наибольшее значение среди списка своих аргументов.

UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1

Это не стандартная функция в ANSI SQL, поэтому не рассчитывайте на ее доступность в других базах данных SQL. Если вам требуется независимое от поставщика решение, используйте синтаксис CASE, предложенный другими. Но если все, что вам нужно использовать, это MySQL, эта функция более кратка.