加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:56:32 所属栏目:MsSql教程 来源:网络整理
导读:我试图在同一个表中找到一行中的两列中最小的数字,其中一列可能在特定行中为空.如果其中一列为空,我希望该行返回的另一列中的值为这种情况下最低的非空列.如果我在 MySQL 5.1中使用least()函数: select least(1,null) 这返回null,这不是我想要的.在这种情况
我试图在同一个表中找到一行中的两列中最小的数字,其中一列可能在特定行中为空.如果其中一列为空,我希望该行返回的另一列中的值为这种情况下最低的非空列.如果我在 MySQL 5.1中使用least()函数:
select least(1,null)

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

我已经能够得到我想要的结果一般这个查询:

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

只要col1和col2都不为空,每个coalesce语句将返回一个数字,而最小()处理查找最低的.

有没有更简单/更快的方式来做到这一点?在这种情况下,我使用的是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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读