使用mysql更新平均值的多行

时间:2014-04-24 10:53:26

标签: mysql

我已经非常接近使用其他答案回答这个问题,但我只是在努力克服困难。

我有一个无法更改的客户端表结构,它由许多表组成,但我感兴趣的两个如下(简化):

表1: ID1(PK), ID2(PK), ID3(PK), AVGPercent(目前为空)

示例:

ID1,ID2,ID3,AVGPercent
a,b,c,NULL
e,f,g,NULL

表2: ID1(PK), ID2(PK), ID3(PK), ID4(PK), %的

示例:

ID1,ID2,ID3,ID4,百分比
a,b,c,d,88
a,b,c,e,80
e,f,g,d,92

我可以使用以下SQL获取Table2中不同内容的列表:

SELECT ID1, ID2, ID3, avg(Percent) FROM Table2 group by ID1, ID2, ID3

我需要做的是更新Table1以填充AVGPercent,使其如下所示:

ID1,ID2,ID3,AVGPercent
a,b,c,84
e,f,g,92

我可以轻松地在一行中完成它,我可以使用php从Table2中选择AVG(百分比),然后在Table1中循环更新AVGPercent的26,000条记录,但有没有办法更新Table1中的所有AVGPercent一个人去?

1 个答案:

答案 0 :(得分:1)

您可以使用JOINS使用UPDATE,如下所示

UPDATE Table1 AS t1
INNER JOIN
(
   SELECT ID1, ID2, ID3, 
       avg(Percent) as AvgPercent
   FROM Table2 
   GROUP BY ID1, ID2, ID3
) As t2
    ON t1.ID1=t2.ID1 AND t1.ID2=t2.ID2 AND t1.ID3=t2.ID3
SET t1.AVGPercent  = t2.AvgPercent