您好我想通过在每次迭代中选择该列中的最小值并将其增加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)
答案 0 :(得分:1)
我认为你不能在一个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;
请注意limit 1
,因此只更新了一行。然后,您可以计算已修改行的数量(例如,使用mysql_affected_rows()
)。当它为0时,则停止。
如果要在MySQL中进行循环,也可以在MySQL存储过程中进行设置。