对行的子集执行操作并将结果存储在不同的表中 - mySQL

时间:2016-06-07 15:52:37

标签: mysql

我有一张表,目前存储纬度和经度等信息。该表还存储同一用户的多个记录(即同一行),但存储不同的值(即,我们有重复的行,但其列中的值不同)。我试图获取同一用户的所有记录的平均值(即存储在重复行中的所有值的平均值),并将结果值存储在不同表中的单个唯一行中。

以下是原始表的结构(OldTable):

           creatorId        longitude   latitude    dutyCycleLevel
:ID[giA0CqQcx+(9kbuSKV==    -106.58341  52.115345   -3712
lXB+jIS)DN!CXmj>0(P8^]==    -106.6113   52.084724   -3480
lXB+jIS)DN!CXmj>0(P8^]==    -106.610886 52.084927   -3480
lXB+jIS)DN!CXmj>0(P8^]==    -106.61092  52.084885   -3480

以下是新表的结构(NewTable):

           creatorId    latitude    longitude   DutyCycle
:ID[giA0CqQcx+(9kbuSKV==    NULL    NULL    -3712
lXB+jIS)DN!CXmj>0(P8^]==    NULL    NULL    -3481
lXB+jIS)DN!CXmj>0(P8^]==    NULL    NULL    -3480

您可能会注意到,我仍然有一个重复的creatorId字段。那是因为我根据不同的DutyCycle值存储值。

以下是我尝试使用但未提供所需结果的脚本:

insert into db.NewTable(latitude)
select AVG(oldTable.latitude) from db.oldTable 
inner join NewTable on NewTable.dutyCycle = oldTable.dutyCycleLevel
group by dutyCycleLevel

正如我所提到的,我试图获取每个唯一的dutyCycle的平均纬度(可以在原始表中注意到)并将其作为NewTable中的唯一平均值存储在与原始表中相同的行中(即相同的dutyCycle行)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果要更新新表

insert into db.NewTable(creatorId, longitude, latitude, dutyCycleLevel)
select creatorId, AVG(longitude), AVGlatitude), dutyCycleLevel
from db.oldTable 
group by creatorId, dutyCycleLevel

如果你想从头开始插入

{{1}}