mysql用另一个select sum()更新一个表

时间:2015-08-31 18:09:15

标签: mysql sql-update

我有以下查询,它有效:

select filename, hour, sum(joe) as joe_total, sum(bob) as bob_total
from t1
group by filename, hour

这在以下列中提供了数千行数据:

filename, hour, joe_total, bob_total

每个文件名包含24小时,因此第一行结果将是

filename1, 1, [joe_total_value_hour1], [bob_total_value_hour1]

......第二行是

filename1, 2, [joe_total_value_hour2], [bob_total_value_hour2]

......等等。

我有另一个名为t2的表,其中包含以下字段:

filename, hour, joe_total, bob_total, mary_total, gertrude_total

表t2也有数千行(超过上面选择的结果),但目前列joe_total和bob_total只包含零,需要更新。

所以我想更新t2以便

t2.joe_total = [resuls from the select].joe_total

,类似于每个文件名/小时的t2.bob_total。

我有什么想法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

好的,所以这是有效的查询:

update t2 t2u
inner join
(SELECT filename, HOUR , SUM( joe) ) AS joe_total, SUM( bob ) AS bob_total FROM t1 GROUP BY filename, HOUR) t
on (t2u.filename =t.filename and t2u.hour = t.hour)
SET      t2u.joe_total = t.joe_total,
    t2u.bob_total = t.bob_total,
    ...

非常感谢Jon C帮助打破我的心理冰雹。

答案 1 :(得分:0)

您可以尝试这样的事情:

UPDATE t2 SET 
    t2.joe_total = t.joe_total,
    t2.bob_total = t.bob_total,
    ...
    FROM  
    (  
        select filename, hour, sum(joe) as joe_total, sum(bob) as bob_total
        from t1
        group by filename, hour 
    ) t  
WHERE t2.filename = t.filename
AND t2.hour = t.hour