想要将平均值仅从常规值表中插入到2008年的平均值中作为平均值,但代码有错误我如何克服。没有“哪一年(DATE_FORMAT(日期,'%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
答案 0 :(得分:0)
简单地做
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
年度功能会自动为您进行转换,您也可以从速度中受益。
答案 1 :(得分:0)
我发现这里有一个可能的问题(如果你指定了错误,会更容易指导你): WHERE子句应出现在GROUP BY子句之前(至少在大多数DBMS中)。 我相信如果你在它们之间切换,它应该可以工作。