Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何根据其ID-s对金额求和,并将结果添加到现有表的新列中_Mysql_Sql - Fatal编程技术网

Mysql 如何根据其ID-s对金额求和,并将结果添加到现有表的新列中

Mysql 如何根据其ID-s对金额求和,并将结果添加到现有表的新列中,mysql,sql,Mysql,Sql,我有一个快速增长的数据库表(下表),它有超过400万行 这是我正在讨论的表格: # Name Type Collation Attributes Null Default Extra Action 1 user_id int(11) No None Change Change Drop Drop Browse distinct values Browse distinct values Primary Pr

我有一个快速增长的数据库表(下表),它有超过400万行

这是我正在讨论的表格:

#   Name    Type       Collation    Attributes  Null    Default Extra   Action
 1  user_id int(11)         No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 2  amount  decimal(16,8)           No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 3  aff int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 4  jackpot int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 5  paidout int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 6  type    int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 7  created timestamp           No  CURRENT_TIMESTAMP        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
我运行一个查询,按用户id对金额求和,然后得到结果

SELECT user_id, SUM(amount) 
FROM trans
group by user_id;
我的问题是如何将这些结果(SUM-s)添加到另一个现有表中我有相同的用户ID并将这些SUM-s保存在那里

我现有的表具有这种结构

#   Name    Type    Collation   Attributes  Null    Default Extra   Action
 1  id  int(4)          No  None    AUTO_INCREMENT   Change Change   Drop Drop   Browse distinct values Browse distinct values  Primary Primary  Unique Unique  Show more actions More
 2  balance int(11)         No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 3  ads varchar(60) latin1_swedish_ci       No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 4  ip  varchar(85) latin1_swedish_ci       No           Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 5  hash    varchar(150)    latin1_swedish_ci       No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 6  email   varchar(150)    latin1_swedish_ci       No  None         Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 7  aff int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 8  with    int(11)         No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 9  timestamp   bigint(20)      UNSIGNED    No  0        Change Change   Drop Drop   Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More

我希望将总和放在id列之后的新列上。

您可以执行以下操作:

alter table table2 add column thesum decimal(16, 8);

update table2 t2
    set thesum = (select sum(amount) from table1 t1 where t2.user_id = t1.user_id)
现在,这有一些问题。当第一个表中的值更改时,第二个表中的值不会更改。要实现这一点,需要使用触发器重新调整值

通常,建议对此类流程使用视图。然而,这并不是特别有效。我的猜测是,出于性能原因,您需要总结这些值。如果是这样,请注意保持值的一致性

编辑:

要将总数相加,只需执行以下操作:

update table2 t2
    set thesum = thesum + coalesce((select sum(amount) from table1 t1 where t2.user_id = t1.user_id), 0);

我之所以需要这样做,是因为我需要定期删除这个大表,因为它会使我的服务器速度减慢太多,并在另一个服务器上保留更新的余额table@user38935 . . . 在较大的表上,可能还有其他方法来提高性能,例如使用分区。然而,这是对另一个问题的回答。如果您想保留所有历史记录并获得良好的性能,请问另一个问题。第一次查询运行良好,但现在如果我清空表nr1,并且在一段时间后生成了新行,我需要将新的Sum添加到表nr2和nr2的Sum on列中(SUM-s,新的SUM生成的orm表Nr1和表nr2上的旧SUM)现在我用大表测试它,查询似乎阻塞了服务器,我多次测试重启服务器,但每次服务器阻塞,php管理员没有响应,我都会问一个关于改进此表的权限的新问题