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

Posted

技术标签:

【中文标题】如何在 MySQL 中获取两个值的最大值?【英文标题】:How to get the max of two values in MySQL? 【发布时间】:2010-12-06 15:30:17 【问题描述】:

我试过但失败了:

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

【问题讨论】:

【参考方案1】:

使用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; 会给你约会1。 如果某些值可能为空,你可以GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))【参考方案2】:

获取一组行中列的最大值:

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))【参考方案3】:

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

以上是关于如何在 MySQL 中获取两个值的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

C# - 字典 - 如何在字典中获取特定类值的最大值? [复制]

如何在 ASP.NET Identity 中获取索赔值的最大值?

mysql - 从多列中获取两个最大值

关于数据库MySQL中求两个时间差的问题。

mysql 怎么获取最大值的那条记录

如何在Mysql取出来的结果中取最大值