簡體   English   中英

使用另一個表更新mysql表多列

[英]update mysql table multiple columns using another table

我有以下表格( 表格:avg_month_val1

year                       
month        
evep                
sunshine_hrs             
rainfall     
max_temp               
min_temp  

表:reg_data3

id         
date                
time                  
rainfall                
evep                         
max_temp                   
min_temp    
sunshine_hrs

我想使用reg_data3更新avg_month_val1表,我遵循如何從mysql中的另一個表更新多個字段?

這是我的查詢

UPDATE `avg_month_val1` a,`reg_data3` b SET
a.`year`=YEAR(b.`date`),
a.`month`=MONTH(b.`date`),
a.`evep`=ROUND(AVG(b.evep),2),
a.`max_temp`=ROUND(AVG(b.max_temp),2), 
a.`min_temp`=ROUND(AVG(b.min_temp),2) ,
a.`rainfall`=ROUND(SUM(b.rainfall),2), 
a.`sunshine_hrs`=ROUND(AVG(b.sunshine_hrs),2)
WHERE a.`year`=YEAR(b.`date`)

但它給出以下錯誤

Error Code: 1111
Invalid use of group function

我如何做到這一點

這樣嘗試

UPDATE avg_month_val1 t JOIN 
(
  SELECT YEAR(date) year,
         MONTH(date) month,
         ROUND(AVG(evep), 2) evep,
         ROUND(AVG(max_temp), 2) max_temp,
         ROUND(AVG(min_temp), 2) min_temp,
         ROUND(SUM(rainfall), 2) rainfall,
         ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
    FROM reg_data3
   GROUP BY YEAR(date), MONTH(date)
) s 
    ON t.year = s.year
   AND t.month = s.month
   SET t.evep = s.evep,
       t.max_temp = s.max_temp, 
       t.min_temp = s.min_temp, 
       t.rainfall = s.rainfall, 
       t.sunshine_hrs = s.sunshine_hrs 

使用UPDATE意味着你已經在表avg_month_val1與列的行yearmonth填充,只需要更新數據列( evep從累計值,...) reg_data3

但是,如果不是這種情況,並且您想INSERT所有列(包括yearmonth但是能夠使用相同的年和月值更新現有行,則可以使用ON DUPLICATE KEY子句

INSERT INTO avg_month_val1 (year, month, evep, max_temp, min_temp, rainfall, sunshine_hrs)
SELECT YEAR(date) year,
       MONTH(date) month,
       ROUND(AVG(evep), 2) evep,
       ROUND(AVG(max_temp), 2) max_temp,
       ROUND(AVG(min_temp), 2) min_temp,
       ROUND(SUM(rainfall), 2) rainfall,
       ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
  FROM reg_data3
 GROUP BY YEAR(date), MONTH(date)
 ON DUPLICATE KEY UPDATE
       evep = VALUES(evep),
       max_temp = VALUES(max_temp), 
       min_temp = VALUES(min_temp), 
       rainfall = VALUES(rainfall), 
       sunshine_hrs = VALUES(sunshine_hrs)

為了使其正常工作,您必須確保avg_month_val1 (年,月)具有UNIQUEPRIMARY KEY約束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM