MySQL子查询或加入

时间:2015-03-03 10:59:02

标签: mysql sql join subquery

我必须将Date从一个表迁移到另一个表。

这是源表。对于每个testid,有2个通道,每个通道有3行。

id  value1  value2  testid  channel
1   123     567     789     asd
2   125     587     789     asd
3   126     596     789     asd
4   569     12      789     qwe
5   567     15      789     qwe
6   563     19      789     qwe
7   12      877     963     asd
8   23      765     963     asd
9   34      676     963     asd
10  987     23      963     qwe
11  876     34      963     qwe
12  678     12      963     qwe

进入这个

id  value1_asd  value2_asd  value1_qwe  value_2_qwe test_id
1     124.6       583.3      566.3        15.3       789

这可以在一个查询中完成吗?我可以在几个中做到这一点,但在我真正的桌子上需要很长时间。我有超过400万条目。

2 个答案:

答案 0 :(得分:0)

首先,为了方便起见,请保持第二个表的id自动增量。

然后你可以运行这个查询,

INSERT INTO table2 (value1_asd,value2_asd,value1_qwe,value_2_qwe,test_id) SELECT AVG(T1.value1),AVG(T1.value2),AVG(T2.value1),AVG(T2.value2),AVG(T3.testid)
FROM Table1 AS T1,Table1 AS T2,Table1 AS T3 
WHERE T1.channel='asd' AND T2.channel='qwe';

select将选择字段的平均值。由于我们这里有3个场景

  

1)信道=' ASD'
  2)信道=' QWE'
  3)testid

我们将同一个表视为3个不同的表(使用Alias)。 select中选择的值将插入第二个表table2。

希望这会有所帮助。

答案 1 :(得分:0)

我想我找到了一个解决方案......

INSERT INTO table2 (value1_asd,value2_asd,value1_qwe,value_2_qwe,test_id) SELECT T1.v1,T1.v2,T2.v1,T2.v2,T2.testid
FROM (SELECT AVG(`value1`) as v1, AVG(`value2`) as v2, `channel`, `testid` FROM table1 WHERE `channel` = 'asd' GROUP BY `testid`) AS T1,
(SELECT AVG(`value1`) as v1, AVG(`value2`) as v2, `channel`, `testid` FROM table1 WHERE `channel` = 'qwe' GROUP BY `testid`) AS T2
WHERE T1.testid = T2.testid
GROUP BY T2.testid

感谢您的解决方案,它给了我正确的想法。 SG