MySQL 子查询或连接
MySQL subquery or join
我必须将日期从一个 table 迁移到另一个。
这是来源Table。对于每个 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
这可以在一次查询中完成吗?我可以多次完成,但在我的真实 table 中需要很长时间。我有超过 400 万个条目。
首先,为了简单起见,保留第二个 table 自动递增的 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
将 select 字段的平均值。由于我们这里有 3 个场景
1)channel='asd'
2)channel='qwe'
3)testid
我们将相同的 table 视为 3 个不同的 table(使用别名)。
在 select
中编辑的值 select 将插入到第二个 table table2.
希望对您有所帮助。
我想我找到了解决办法...
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
感谢您的解决方案,它给了我正确的想法。
新加坡
我必须将日期从一个 table 迁移到另一个。
这是来源Table。对于每个 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
这可以在一次查询中完成吗?我可以多次完成,但在我的真实 table 中需要很长时间。我有超过 400 万个条目。
首先,为了简单起见,保留第二个 table 自动递增的 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
将 select 字段的平均值。由于我们这里有 3 个场景
1)channel='asd'
2)channel='qwe'
3)testid
我们将相同的 table 视为 3 个不同的 table(使用别名)。
在 select
中编辑的值 select 将插入到第二个 table table2.
希望对您有所帮助。
我想我找到了解决办法...
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
感谢您的解决方案,它给了我正确的想法。 新加坡