2014-08-28 44 views
0

我有一個表的價格,我想在最低價格的表上創建一個視圖。Mysql至少()大於0

我的表格有例如列price1,price2。

我以爲我可以用它的最小()

例如,從價目表中選擇最少(price1,price2)

但它應該只考慮大於0或不爲零的價格。

我可以用LEAST()來做到這一點嗎?

感謝您的建議。

+0

[查詢獲取大於零的最小值並且不是NULL]可能的重複(http://stackoverflow.com/questions/9684757/query-to-get-lowest-value-thats-greater-than-零ANS-是 - 不能爲空) – sjagr 2014-08-28 18:27:09

回答

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 
0

使用LEAST()功能上的表現,而不是裸列。表達式可以檢查每個price1的值,並僅在大於零時返回該值,否則返回NULL。

例如:

SELECT LEAST(IF(price1>0,price1,NULL) , IF(price2>0,price2,NULL)) FROM pricelist 
0

人們必須小心,因爲至少如果任一比較是NULL()返回NULL。

SELECT NULLIF(LEAST(
    COALESCE(NULLIF(price1,0),999999999), 
    COALESCE(NULLIF(price2,0),999999999)), 
999999999) AS least_price 
FROM pricelist 

我認爲價格可以是零,零或大於零但不小於零。我使用NULLIF強制價格爲零,如果它爲零。然後使用COALESCE強制NULL是一個非常大的值,肯定比另一個值大。

比較兩個使用最少。

如果兩個價格最初都是NULL或零,則比較返回非常大的值。這可能不是你想要的,所以再次使用NULLIF來創建NULL。