如何获取每个id的值总和并更新其他表中的现有记录

时间:2014-05-19 14:16:41

标签: sql postgresql sql-update aggregate-functions

我有两张表,如:

ID          |    TRAFFIC
fd56756     |      4398
645effa     |    567899
894fac6     |    611900
894fac6     |    567899

USER        |      ID         |    TRAFFIC
andrew      |    fd56756      |       0
peter       |    645effa      |       0
john        |    894fac6      |       0

我需要从第一个表中获取SUM ("TRAFFIC")并将列流量设置为第一个表ID = second表ID的第二个表。第一张表中的ID不是唯一的,可以复制 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

以后评论中的表名。您可能会错误地报告表名和列名。

UPDATE users u
SET    "TRAFFIC" = sub.sum_traffic
FROM  (
   SELECT "ID", sum("TRAFFIC") AS sum_traffic
   FROM   stats.traffic
   GROUP  BY 1
   ) sub
WHERE u."ID" = sub."ID";

除此之外:在Postgres中使用混合大小写标识符是不明智的。使用合法的小写标识符(不需要双引号)可以让您的生活更轻松。 Start by reading the manual here.

答案 1 :(得分:0)

这样的东西?

UPDATE users t2 SET t2.traffic = t1.sum_traffic FROM
 (SELECT sum(t1.traffic) t1.sum_traffic FROM stats.traffic t1)
WHERE t1.id = t2.id;