MySQL使用基于另一个表的数据的简单平均值更新一个表

时间:2017-10-30 20:08:45

标签: mysql

我有两个共同使用appName的表:

表1:

id, appName, mem
1,  app1,    2 
2,  app1,    4
3,  app2,    3
4,  app2,    5

表2:

id, appName, mem
1,  app1,    0 
2,  app2,    0

我的目标是使用SQL查询更新 table2 ,以便每个应用程序的运行平均值如下:

table2(所需状态):

id, appName, mem
1,  app1,    3 
2,  app2,    4

有什么想法吗? 编辑:通过平均值,我的意思是一个简单的平均值,它是mem的总和除以每个应用程序记录的数量(即,app1 = sum(2,4)/ 2))

3 个答案:

答案 0 :(得分:0)

UPDATE table2, (SELECT app, AVG(mem) avg FROM table1 GROUP BY appName) t1avg SET table2.mem = t1avg.avg WHERE table2.appName = t1avg.appName;

请注意,我还没有测试过,但这是一般格式。您可以在更新上创建子查询以获取此类数据,但请确保正确设置索引。

另外,如果你经常这样做,你可能想要考虑一个视图,并且考虑到所有这些,你应该在他们自己的表中有应用程序,有第二个表引用appId及其内存。

答案 1 :(得分:-1)

 Update table2 inner join table1 on table2.appName = table1.appName SET table2.mem = AVG (table1.mem) group by table1.appName 
像上面这样的东西应该有效。目前未在手机上测试

答案 2 :(得分:-1)

以下查询将起作用:

update table2 t2 join
           (select appname,avg(mem) as avgscore
            from table1
            group by appname
           ) t1
           on t1.appname = t2.appname
        set t2.mem = t1.avgscore;

Click here for DEMO