我必须将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万条目。
答案 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