在 SET 语句中使用 MIN() MySQL
Using MIN() in SET statement MySQL
我正在使用 MySQL。让我们将我拥有的 table 称为 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 |
+----+--------+--------+-------------+----------+
现在,我需要将 TargetPrice 更新为 Quantity 为 0 的任何行的 Price1 和 Price2 中的最小值
我试过:
UPDATE Inventory SET
TargetPrice= MIN(Price1,Price2)
WHERE Quantity >0
但是,MySQL 抱怨 MIN() 函数的使用。我知道它期望 MIN() 处理列内包含的数据,而不是对指定行的两列进行 MIN()。
除了游标之外,还有其他实现方法吗?
编辑:
Price1
和 Price2
可以是 null
或 0
,在所有这些情况下,它应该被视为无穷大,以便与它进行比较时另一个价格变得最小。
使用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
我正在使用 MySQL。让我们将我拥有的 table 称为 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 |
+----+--------+--------+-------------+----------+
现在,我需要将 TargetPrice 更新为 Quantity 为 0 的任何行的 Price1 和 Price2 中的最小值
我试过:
UPDATE Inventory SET
TargetPrice= MIN(Price1,Price2)
WHERE Quantity >0
但是,MySQL 抱怨 MIN() 函数的使用。我知道它期望 MIN() 处理列内包含的数据,而不是对指定行的两列进行 MIN()。
除了游标之外,还有其他实现方法吗?
编辑:
Price1
和 Price2
可以是 null
或 0
,在所有这些情况下,它应该被视为无穷大,以便与它进行比较时另一个价格变得最小。
使用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