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


289

我尝试过但失败了:

mysql> select max(1,0);
错误1064(42000):您的SQL语法有错误;查看手册
对应于您的MySQL服务器版本以使用正确的语法 
第1行的'0)附近

Answers:


527

使用GREATEST()

例如:

SELECT GREATEST(2,1);

注意:每当那时任何单个值包含null时,此函数始终返回null(感谢用户@ sanghavi7)


41
需要记住的一件事是,如果那时任何单个值包含null,此函数将始终返回null作为答案!
sanghavi7 2013年

33
还有LEAST
bobobobo

1
如何运行子查询作为参数,GREATEST以便可以获取cirtain列的值
Junaid Qadir

17
为避免null问题,可以使用ifnull。例如,select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;您将获得日期。
Christoph Grimmer-Dietrich

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。任何null值都将导致函数返回null。为防止这种情况,您可以做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。它过于复杂
Kyborek '18

1
如果某些值可以为null,则可以GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
肖恩·宾
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.