假设我有下表:
CREATE TABLE numbers
(
key integer NOT NULL DEFAULT 0,
number1 integer NOT NULL DEFAULT 0,
number2 integer NOT NULL DEFAULT 0,
number3 integer NOT NULL DEFAULT 0,
number4 integer NOT NULL DEFAULT 0,
CONSTRAINT pk PRIMARY KEY (key),
CONSTRAINT nonzero CHECK (key <> 0)
)
我想要检索的是所有4个数字中给定键的最小值,但忽略那些为零的值。
当我发现我的零问题时,我开始使用这样的东西:
SELECT LEAST(number1, number2, number3, number4) FROM numbers WHERE key = 1
例如,如果我有元组(1, 5, 0, 3, 2)
我想要返回2
,或者(2, 3, 0, 0, 0)
我想要返回3
,依此类推。
这可以在一个查询中完成(或者可能是嵌套的),我真的不想编写一个程序来执行此操作。
答案 0 :(得分:4)
尝试NULLIF功能:
SELECT LEAST(
nullif( number1, 0 ),
nullif( number2, 0 ),
nullif( number3, 0 ),
nullif( number4, 0 ))
FROM numbers
演示 - &gt; http://www.sqlfiddle.com/#!12/641fb3/1
答案 1 :(得分:0)
LEAST
会忽略NULL
个值,因此以下内容应该有效:
select least(n1, n2, n3, n4)
from (
select case when number1 <= 0 then null else number1 end as n1,
case when number2 <= 0 then null else number2 end as n2,
...
from numbers
) t
这样你也可以处理负数。如果你确定永远不会有负值,那么kordirko的答案可能会更容易一些。