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

标签 sql mysql

我试图在同一个表中的一行的两列中找到最小的数字,但需要注意的是,其中一列在特定行中可能为空。如果其中一列为空,我希望为该行返回另一列中的值,因为在这种情况下这是最低的非空列。如果我在 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/

相关文章:

php - 使用 LIMIT 选择左连接

mysql - 无法访问 mySQL Workbench 的端口 3306

php - MySQL慢查询日志的应用程序特定数据?

mysql - 如何从数据库中删除重复条目?

php - PHP-警告:为foreach()提供了无效的参数

sql - 根据连接表的另一列对一列进行双重计数

sql - PostgreSQL 中的并行 unnest() 和排序顺序

sql - 使 ID 属性在 XML 中唯一

php - codeigniter 中的 Home Controller 中未调用 user_validation 函数

SQL varchar 变量插入问号