ChatGPT解决这个技术问题 Extra ChatGPT

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

我试过但失败了:

mysql> select max(1,0);
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

N
NinethSense

使用GREATEST()

例如:

SELECT GREATEST(2,1);

注意:无论何时,如果任何单个值包含 null,此函数总是返回 null(感谢用户 @sanghavi7)


需要记住的一件事是,只要当时任何单个值包含 null,此函数总是返回 null 作为答案!
还有LEAST
如何将子查询作为 GREATEST 的参数运行,以便获取特定列的值
为了防止 null 出现问题,您可以使用 ifnull。例如,select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null; 会让您获得 date1。
如果某些值可能为空,您可以执行 GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
c
cs_alumnus

要跨一组行获取列的最大值:

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

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

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

使用 GREATEST 注意空值。任何 null 值都会导致函数返回 null。为了防止这种情况,您可以执行 GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
L
Leonid Zakharov

您可以将 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)。


这就是为什么我真的讨厌 MySQL。做这么简单的事情需要做多少工作。
这可以简单地替换为 select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue。它过于复杂
如果某些值可以为空,您可以执行 GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))