我有一张价格表,我想在桌子上创建一个价格最低的视图。
我的表格中包含了price1,price2。
列我以为我可以用LEAST()
来做到这一点e.g。从价格表中选择最小值(price1,price2)
但它应该只考虑价格大于0或不是null。
我能用LEAST()吗?
感谢您的建议。
答案 0 :(得分:2)
必须小心,因为如果比较器为NULL,则LEAST()返回NULL。
SELECT NULLIF(LEAST(
COALESCE(NULLIF(price1,0),999999999),
COALESCE(NULLIF(price2,0),999999999)),
999999999) AS least_price
FROM pricelist
我假设价格可以是NULL,零或大于零,但不小于零。如果它为零,我使用NULLIF强制价格为NULL。然后使用COALESCE强制NULL为一个非常大的值,这肯定大于另一个值。
使用LEAST比较两者。
如果两个价格原来都是NULL或零,则比较返回非常大的值。这可能不是你想要的,所以再次使用NULLIF,使其成为NULL。
答案 1 :(得分:0)
不确定最少限制0的函数,或者你可以使用2个价格列的案例表达式
select
case when price1 = 0 or price1 is null then price2
when price2 = 0 or price2 is null then price1
else least(price1,price2)
end as price
from table