【问题标题】:MySQL subquery or joinMySQL 子查询或连接
【发布时间】:2015-03-03 10:59:01
【问题描述】:

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

这是源表。每个 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 万个条目。

【问题讨论】:

  • 我在这里看不到查询或表格。如果您的问题是关于 MySQL 的,那么去掉 HTML,只发布数据。另请查看此页面:How to Ask.

标签: mysql sql join subquery


【解决方案1】:

首先,为方便起见,保持第二个表的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 个不同的表(使用别名)。 select中选择的值将被插入到第二个表table2中。

希望这会有所帮助。

【讨论】:

  • 如果表中只有一组数据,则此方法有效。但是第二组数据和另一个 testid 的结果是一团糟......
  • 所以你的意思是你也需要基于频道的 testid 的平均值。那么您是否期望第二个表中有两条记录?
【解决方案2】:

我想我找到了解决办法...

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

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

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多