Mysql LEAST()大于0

时间:2014-08-28 18:21:36

标签: mysql

我有一张价格表,我想在桌子上创建一个价格最低的视图。

我的表格中包含了price1,price2。

我以为我可以用LEAST()

来做到这一点

e.g。从价格表中选择最小值(price1,price2)

但它应该只考虑价格大于0或不是null。

我能用LEAST()吗?

感谢您的建议。

2 个答案:

答案 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