一尘不染

如何在SQL的特定行中找到最少的非空列?

sql

我试图在同一张表的一行的两列中找到最低的数字,但要注意的是,在特定行中,其中一列可能为null。如果其中一列为空,则我希望为该行返回另一列中的值,因为在这种情况下,这是最低的非空列。如果我在MySQL
5.1中使用minimum()函数:

select least(1,null)

这将返回null,这不是我想要的。在这种情况下,我需要查询返回1。

通过此查询,我已经能够大致获得所需的结果:

select least(coalesce(col1, col2)) , coalesce(col2,col1))

只要col1和col2都不为空,则每个结盟语句将返回一个数字,并且minimum()会处理找到最小值的问题。

有没有更简单/更快的方法来做到这一点?我在这种情况下使用MySQL,但欢迎使用一般的解决方案。


阅读 114

收藏
2021-03-17

共1个答案

一尘不染

不幸的是(对于您的情况)在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))
2021-03-17