我试图在同一张表的一行的两列中找到最低的数字,但要注意的是,在特定行中,其中一列可能为null。如果其中一列为空,则我希望为该行返回另一列中的值,因为在这种情况下,这是最低的非空列。如果我在MySQL 5.1中使用minimum()函数:
select least(1,null)
这将返回null,这不是我想要的。在这种情况下,我需要查询返回1。
通过此查询,我已经能够大致获得所需的结果:
select least(coalesce(col1, col2)) , coalesce(col2,col1))
只要col1和col2都不为空,则每个结盟语句将返回一个数字,并且minimum()会处理找到最小值的问题。
有没有更简单/更快的方法来做到这一点?我在这种情况下使用MySQL,但欢迎使用一般的解决方案。
不幸的是(对于您的情况)在MySQL 5.0.13(http://dev.mysql.com/doc/refman/5.0/en/comparison- operators.html#function_least)中,LEAST的行为已更改-仅用于返回NULL如果所有参数均为NULL。
甚至将此更改报告为一个错误:http : //bugs.mysql.com/bug.php?id=15610 但此修复程序仅适用于MySQL文档,解释了新的行为和兼容性问题。
您的解决方案是建议的解决方法之一。另一个可以使用IF运算符:
SELECT IF(Col1 IS NULL OR Col2 IS NULL, COALESCE(Col1, Col2), LEAST(Col1,Col2))