2013-02-02 34 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

你是什么意思的僵局?你能解释一下吗? –