2013-02-02 3 views
1

을의 COUNT()와 행은 두 테이블을 상상해업데이트 SUM()와 다른 행

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

쿼리 행이 t1.id=t2.id_t1의 카운트 t2t1.id=t2.id_t1t1.count의 값의 합으로 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

교착 상태는 무엇을 의미합니까? 당신이 조금 설명 할 수 있니? –