您好,我想通过在每次迭代中选择该列中的最小值并将其增加 10% 直到列的总和变为特定值(例如 3000)来更新列
UPDATE db1.tb1 a
SET a.col1 = IF(SUM(a.col1) < 3000, a.col1 + ( a.col1 / 10 ), a.col1)
WHERE a.col1 IN (SELECT Min(b.col1)
FROM (SELECT col1,
col2
FROM db1.tb1),
b)
最佳答案
我认为您无法在单个 update
语句中完成此操作。可以重复循环。每次迭代看起来都更像这样:
update tb1.tbl t cross join
(select min(col1) as min1, sum(col1) as sum1
from tb1.tbl
) tt
set col1 = 1.1 * col1
where tt.sum1 < 3000 and t.col1 = tt.min1
limit 1;
请注意限制 1
,因此仅更新一行。然后,您可以计算修改的行数(例如使用mysql_affected_rows()
)。当为0时,则停止。
如果您想在 MySQL 中进行循环,您还可以在 MySQL 存储过程中进行设置。
关于python - 用循环更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115009/