2013-02-02 35 views
1

的COUNT()的行試想兩個表所示:更新與SUM()和其他行

t1: id, sum, cnt 
t2: id, id_t1, value 

我想要做這樣的查詢;

UPDATE t1, t2 
    SET t1.sum = SUM(t2.value), 
     t1.cnt = COUNT(*) 
WHERE t1.id = t2.id_t1; 

查詢應與t2其中t1.id=t2.id_t1t1.count值與行有t1.id=t2.id_t1的計數之和更新t1.sum

但失敗並返回一個錯誤:ER_INVALID_GROUP_FUNC_USE: Invalid use of group function

我應該怎麼辦呢?

回答

5
UPDATE t1 a 
     LEFT JOIN 
     (
      SELECT id_t1, 
        SUM(value) totalSum, 
        COUNT(*) totalCount 
      FROM t2 
      GROUP BY id_t1 
     ) b ON a.ID = b.id_t1 
SET a.sum = COALESCE(b.totalSum, 0) , 
    a.cnt = COALESCE(b.totalCount, 0) 
+1

+1 @JW - 偉大的答案! – sgeddes

+0

使用此查詢時出現很多死鎖。我怎麼能避免它們? – Peter

+0

你是什麼意思的僵局?你能解釋一下嗎? –