sql - Oracle SQL 中最小值但不为 NULL

标签 sql oracle

我想在我的程序中使用函数 LEAST 来查找最小值。问题是有些值可能是 NULL,所以如果我这样做

select least(NULL,0,1) from dual

我得到的答案是 NULL,这可能是正确的,因为这不是我期望返回的内容。我想获得最小的真实非零值。非常感谢任何帮助。

最佳答案

如果任何参数为 NULL,则您希望采用其他参数中的最少值。如果所有参数均为 NULL,则您希望返回 NULL。

我可能会使用这样的两个参数:

LEAST(NVL(colA,colB), NVL(colB,colA))

尽管有 >2 个参数,它开始变得丑陋:

LEAST(COALESCE(colA,colB,colC)
     ,COALESCE(colB,colA,colC)
     ,COALESCE(colC,colA,colB))

此时我会开始考虑魔法值;但这可能有问题(例如,如果合法值之一魔法值怎么办?):

SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
FROM   (SELECT LEAST(NVL(:colA,maxv)
                    ,NVL(:colB,maxv)
                    ,NVL(:colC,maxv)) AS r, maxv
        FROM   (SELECT 9.999999999999999999999999999999999999999e125
                       AS maxv FROM DUAL));

关于sql - Oracle SQL 中最小值但不为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313770/

相关文章:

sql - 有没有办法从 MySQL 的正则表达式中提取子匹配项?

mysql - UNIQUE 约束与 INSERT 之前的检查

java - 使用 hibernate 命名查询和 spring 填充 DTO 的 List 属性

oracle - 按字母顺序对 varchar2 中的字符进行排序

sql - 线索和案例表达

mysql - Oracle - 返回具有 max_date 重复项的行

oracle - 显示 Oracle AQ SYS.AQ$_JMS_TEXT_MESSAGE 的内容

sql - 使用 SQL 获取按部门分组的最大值

java - 分析 Oracle 数据库中的大型数据集是在内存中还是迭代查询中进行?

sql - 从表 b 更新表 a 其中(条件)