Kal*_*lol 3 mysql min sql-update
我正在使用 MySQL。让我们调用一张我拥有的表格,Inventory如下所示:
+----+--------+--------+-------------+----------+
| 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 |
+----+--------+--------+-------------+----------+
现在,我需要将 Quantity 为 0 的任何行的 TargetPrice 更新为 Price1 和 Price2 的最小值
我试过了:
UPDATE Inventory SET
TargetPrice= MIN(Price1,Price2)
WHERE Quantity >0
然而,MySQL 抱怨 MIN() 函数的使用。我知道它期望 MIN() 处理列内包含的数据,而不是使用指定行的两列的 MIN() 。
无论如何要实现这个而不是游标?
编辑:
Price1 and Price2can be nullor 0and 在所有这些情况下,它应该被视为无穷大,以便其他价格与它相比变得最小。
使用LEAST而不是MIN:
UPDATE Inventory
SET TargetPrice = LEAST(Price1,Price2)
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)
MIN是对行集进行操作的聚合函数,而LEAST对传递的参数列表进行操作。
编辑:
UPDATE Inventory
SET TargetPrice = LEAST(COALESCE(Price1, Price2), COALESCE(Price2, Price1))
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)
您可以使用COALESCE来处理NULL值。
编辑2:
您可以使用NULLIF来处理0值:
UPDATE Inventory
SET TargetPrice = LEAST(COALESCE(NULLIF(Price1,0), Price2),
COALESCE(NULLIF(Price2,0), Price1))
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |