mysql 批量累计 count 并写进数据库

我的问题和stackoverflow.com中一人类似,路径如下:

https://stackoverflow.com/que...

clipboard.png
解决方法是:
clipboard.png

但是它只是查询的结果展示,我希望的是能将cumSrome存入数据库表a,而且是批量存,
我想到的方法是建立新的临时表b,先存入结果,然后通过关联表更新a,但是如果数据很大,这样整个表查询结果,感觉很耗费时间,还要关联更新表,似乎不可行,请问有好的方法解决吗?

阅读 4k
3 个回答

可以结合MySQL的批量更新来搞,比如给定这样的数据:

clipboard.png

现在要计算相同age下所有grade的和,并更新到对应每行的age_grade_sum中:

INSERT INTO ttt 
( `id`, `age_grade_sum` )
SELECT t1.id, SUM(t2.grade) AS `sum`
FROM ttt t1
INNER JOIN ttt t2 ON t1.age = t2.age
GROUP BY t1.id, t1.age
ON DUPLICATE KEY UPDATE `age_grade_sum` = VALUES(`age_grade_sum`);

结果:

clipboard.png

需要具体看你的业务需求,你的原始表更新是以什么方法更新的,可以在原始表更新时,检查原始表值的变化,比如说3减少2的话,那么比3大的都减2。
不过无论怎么处理,初始化还是需要的。

业务需求其实和银行的账单一样,就是实时记录用户的每次存款后的余额(sum)变化,但是因为这种一次性动作频率很高,所以想先给余额一个特定的 -1的值,然后到夜晚或中午时,批量更新这个余额字段(sum),不会更改了历史记录,只会更改特定值-1的余额,而每个人一天可能做几次这种动作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题