2015-06-28 34 views
0

我正在使用MySQL。讓我們稱之爲一個表,我爲Inventory,看起來是下面:在SET語句中使用MIN()MySQL

+----+--------+--------+-------------+----------+ | ID | Price1 | Price2 | TargetPrice | Quantity | +----+--------+--------+-------------+----------+ | 1 | 12 | 1 | | 0 | | 2 | 3 | 3 | 3 | 2 | | 3 | | 4 | | 0 | | 4 | 2 | 2 | 2 | 2 | | 5 | 5 | 45 | 5 | 1 | +----+--------+--------+-------------+----------+

現在,我需要更新TargetPrice到價格1和Price2的最小值,其數量爲0

我有任何行嘗試:

UPDATE Inventory SET TargetPrice= MIN(Price1,Price2) WHERE Quantity >0

然而,MySQL的抱怨MIN()函數的用法。我知道它期望MIN()處理列中包含的數據,而不是取指定行的兩列的MIN()。

無論如何要實現這個比遊標?

編輯: Price1Price2可以null0並且在所有這些情況下,應爲無窮大,這樣其他的價格獲取在反對它相比是最小的治療。

回答

2

使用LEAST代替MIN

UPDATE Inventory 
SET TargetPrice = LEAST(Price1,Price2) 
WHERE Quantity = 0 

MIN是一個聚合函數上的行集操作,而LEAST傳遞的參數列表上運行。

編輯:

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(Price1, Price2), COALESCE(Price2, Price1)) 
WHERE Quantity = 0 

您可以使用COALESCE處理NULL值。

EDIT2:

您可以使用NULLIF處理0值:

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(NULLIF(Price1,0), Price2), 
         COALESCE(NULLIF(Price2,0), Price1)) 
WHERE Quantity = 0 
+0

謝謝。但是,對於ID = 3,價格1爲空,因此上面的LEAST()返回NULL。我想在這種情況下返回價格2。所以基本上,如果兩個價格中的任何一個爲0或零,我需要返回另一個價格,並且對於所有其他條件,數學最小。有什麼幫助嗎? – Kallol

+0

Thx再次。我沒有使用'COALESCE'的原因是它只處理NULL。我需要處理0也作爲類似的行爲NULL。儘管我原來的問題中沒有示例數據,但我現在已經更改了它以包含此要求。可能'CASE'可以提供幫助嗎?但是如果兩者都是NULL(我們需要報告一個NULL)? – Kallol

+0

@卡洛爾再次編輯。 –