想要从常规值中仅将平均值插入到2008年的平均值表中

时间:2013-11-27 09:46:40

标签: mysql sql

想要将平均值仅从常规值表中插入到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

2 个答案:

答案 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中)。 我相信如果你在它们之间切换,它应该可以工作。