我试图在同一个表中的一行的两列中找到最小的数字,但需要注意的是,其中一列在特定行中可能为空。如果其中一列为空,我希望为该行返回另一列中的值,因为在这种情况下这是最低的非空列。如果我在 MySQL 5.1 中使用 least() 函数:
select least(1,null)
这返回 null,这不是我想要的。在这种情况下,我需要查询返回 1。
我已经能够通过这个查询得到我想要的一般结果:
select least(coalesce(col1, col2)) , coalesce(col2,col1))
只要 col1 和 col2 都不为 null,每个 coalesce 语句都会返回一个数字,并且 least() 会处理查找最小值。
有没有更简单/更快的方法来做到这一点?我在这种情况下使用 MySQL,但欢迎使用通用解决方案。
最佳答案
不幸的是(对于您的情况) LEAST 的行为在 MySQL 5.0.13 ( http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_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))
关于sql - 如何在 SQL 的特定行中找到最少的非空列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078370/