mysql从另一个表更新一个表

时间:2015-09-21 09:19:47

标签: mysql

我拥有超过270万行的海量数据库。它包含有关英国房地产价格的数据。

第一个表名为PricePaid并且有一个名为Price和Loc4的列。

现在我试图获得每年按loc4分组的平均值,并更新另一个名为PricePaidByCounty的表格。

我创建了这个SQL语句:

INSERT PricePaidByCounty (County, Avg2013)
SELECT Loc4,
Avg(Price) as AvgPrice2013 FROM PricePaid WHERE Date Like '%2013%'
Group BY Loc4

这适用于插入初始行,但我想使用更新语句,因为我需要每个月运行此SQL查询。

任何人都可以告诉我如何将此插入更改为更新。

我这样做是因为我需要按年快速显示每个地点的平均房价。数据库是那么大我不想在流感上做这个

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用insert ... on duplicate key update statement(https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)使用以下查询更新您的表:

INSERT INTO PricePaidByCounty (County, Avg2013)
SELECT Loc4, Avg(Price) as AvgPrice2013 
FROM PricePaid 
WHERE Date Like '%2013%' 
GROUP BY Loc4
ON DUPLICATE KEY UPDATE Avg2013=AvgPrice2013

为此,您需要确保将一组(County,Avg2013)定义为唯一键。

答案 1 :(得分:0)

表格PricePaidByCounty看起来需要三列CountryYearAverage,以便按年更新时,您可以选择按特定年份更新。然后查询将是:

UPDATE PricePaidByCounty ppbc JOIN (SELECT Loc4,
Avg(Price) as AvgPrice FROM PricePaid WHERE Date Like '%2013%'
Group BY Loc4) ap SET ppbc.Average = ap.AvgPrice WHERE ppbc.Country = ap.Loc4 AND ppbc.Year = 2013;

可以将其增强为按Loc4Year进行分组,然后直接更新为PricePaidByCounty。由于您有多条记录,它可能会运行数天。 :d