我希望查询返回两列中的最小值。但是,如果col1和col2均为NULL,则返回NULL。我已经尝试了coalesce()和nvl(),但是当col1和col2均为NULL时,两者都无法处理。
对于col1 = 3和col = 2:
select least(coalesce(3, 1000000), coalesce(2, 1000000))
这有效,输出为2。
这也适用于col1 = 3和col2 = NULL:
select least(coalesce(3, 1000000), coalesce(NULL, 1000000))
但是,当col1 = NULL和col2 = NULL时,这不起作用
select least(coalesce(null, 1000000), coalesce(null, 1000000))
这给了我1000000而不是null。 如何解决这种情况?
答案 0 :(得分:3)
这个问题还不清楚。我相信您正在尝试比较表的两列。空值没有价值。因此,当您在minimum()中使用它时,除非所有比较的值都为空,否则将始终返回非空值。因此,您可以按以下方式将0替换为null。
select least(coalesce(0, value_1), coalesce(0, value_2));
答案 1 :(得分:1)
您还可以使用case语句比较两个列。
CREATE TABLE emp_data (
Value1 int ,
value2 int
);
insert into emp_data (value1, value2) values (100, 200), (200,200), (300,150)
Select case when value1 > value2 then value2
when value1 < value2 then value1 else null end as Comparison, value1, value2
from emp_data
输出:
Comparison Value1 value2
100 100 200
200 200
150 300 150
这是小提琴:
https://dbfiddle.uk/?rdbms=postgres_10&fiddle=fbd19a9bbc6563d700495fa487888606
答案 2 :(得分:1)
您可以使用横向连接:
select t.*, x.least_val
from (values (2, 3)) t(col1, col2) cross join lateral
(select min(col) as least_val
from (values (t.col1), (t.col2)) v(col)
) x;
您似乎想要min()
的语义,因此这恰好是min()
。
如果您确实要使用least()
和一个“魔术”值,则可以使用nullif()
:
select nullif(least(coalesce(3, 1000000), coalesce(NULL, 1000000)), 1000000)