如何在MySQL中获得两个值的最大值?

Mas*_*ask 274 mysql max

我试过但失败了:

mysql> select max(1,0);
Run Code Online (Sandbox Code Playgroud)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use 
near '0)' at line 1

Nin*_*nse 501

使用GREATEST()

例如:

SELECT GREATEST(2,1);
Run Code Online (Sandbox Code Playgroud)

  • 有一件事需要记住,只要当时任何单个值包含null,此函数总是返回null作为答案! (38认同)
  • 还有[`LEAST`](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_least) (30认同)
  • 要防止null出现问题,可以使用ifnull.例如,从table1中选择最大(date1,ifnull(date2,"00:00:00")),其中date2为null;`将获得date1. (14认同)
  • 如果某些值可能为空,您可以执行“GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))” (2认同)

cs_*_*nus 26

要在一组行中获取列的最大值,请执行以下操作:

SELECT MAX(column1) FROM table; -- expect one result
Run Code Online (Sandbox Code Playgroud)

要获取每行的一组列,文字或变量的最大值:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
Run Code Online (Sandbox Code Playgroud)

  • 用`GREATEST`注意空值。任何null值都将导致该函数返回null。为了防止这种情况,您可以执行`GREATEST(COALESCE(column1,0),COALESCE(column2,0))` (2认同)

Leo*_*rov 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
Run Code Online (Sandbox Code Playgroud)

您可以将NULL更改为首选的默认值(如果两个值均为NULL)。

  • 可以简单地用`select COALESCE(GREATEST(fieldA,fieldB),fieldA,fieldB)作为maxValue代替。太复杂了 (9认同)
  • 如果某些值可以为空,则可以执行“GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))” (3认同)