希望仅在2008年将常规值表中的平均值作为平均值插入到平均值表中,但代码有错误,我无法克服。没有"where year(DATE_FORMAT(DATE,'%y-%m-%d')=2008"查询工作良好
INSERT IGNORE INTO `clima_data`.`avg_month_val1` ( `year` , `month` , `evep` , `sunshine_hrs` , `rainfall` , `max_temp` , `min_temp` )
SELECT year(str_to_date(date, '%Y-%m-%d'))as year,
month(str_to_date(date, '%Y-%m-%d'))as month,
round(avg(evep),2) ,
round(Avg(sunshine_hrs),2),
round(sum(rainfall),2),
round(AVG(max_temp),2) ,
round(avg(min_temp),2)
FROM reg_data3
GROUP BY year(str_to_date(date, '%Y-%m-%d')),
month(str_to_date(date, '%Y-%m-%d'))
WHERE year(DATE_FORMAT(date, '%y-%m-%d'))= 2008
ORDER BY 1 Desc
只需进行
WHERE year(date)= 2008
GROUP BY year(date), month(date)
而不是
GROUP BY year(str_to_date(date, '%Y-%m-%d')),
month(str_to_date(date, '%Y-%m-%d'))
WHERE year(DATE_FORMAT(date, '%y-%m-%d'))= 2008
Year功能将自动为您进行转换,您也将从速度中受益。
我注意到这里有一个可能的问题(如果指定错误,会更容易指导您):WHERE子句应该出现在GROUP BY子句之前(至少在大多数DBMS中是这样)。我相信,如果你在它们之间切换,它应该会起作用。