我拥有超过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查询。
任何人都可以告诉我如何将此插入更改为更新。
我这样做是因为我需要按年快速显示每个地点的平均房价。数据库是那么大我不想在流感上做这个
谢谢
答案 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
看起来需要三列Country
,Year
和Average
,以便按年更新时,您可以选择按特定年份更新。然后查询将是:
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;
可以将其增强为按Loc4
和Year
进行分组,然后直接更新为PricePaidByCounty
。由于您有多条记录,它可能会运行数天。 :d