我的 SQL 表如下所示,它有大约 500 条记录,volume_percentage 当前为空:
id | volume | volume_percentage
--------------------------------
1 | 3151 | 0.00
2 | 832 | 0.00
3 | 39011 | 0.00
[..]
499 | 2311 | 0.00
500 | 1201 | 0.00
我想填充每条记录的volume_percentage 字段。成交量百分比应反射(reflect)该记录的成交量占总成交量的百分比。
所以基本上:
volume_percentage = volume / SUM(volume) * 100;
使用 PHP 和 500 个查询的 while 循环可以轻松实现这一点,但这对我来说听起来并不是最佳选择(这是一个需要定期完成的过程,因为数量经常变化)。有没有办法用纯 SQL 来做到这一点?
最佳答案
您可以通过加入
和聚合来做到这一点:
update mytable t cross join
(select sum(volume) as sumvolume
from mytable
) s
set volume_percentage = 100 * volume / s.sumvolume;
关于MySQL:更新查询中基于SUM的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924914/