2013-03-30 3 views
1

나는 status = 0 인 열의 평균을 찾고이를 해당 테이블의 다른 레코드로 업데이트하려고합니다. 이것은 사용하려고 시도하는 쿼리입니다.평균 열이있는 레코드 업데이트

Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE status=0)) WHERE username="Average"' at line 1 

어떤 아이디어를 나는이 밖으로 정렬 방법 :

UPDATE mc25778 set balance=(AVG(balance WHERE status=0)) WHERE username="Average" 

나는이 작업을 수행하려고이 오류가?

감사합니다.

별도로 모든 사용자 이름의 평균을 계산 하위 쿼리와 테이블에 가입 할 수 있습니다

답변

6

,

UPDATE mc25778 a 
     INNER JOIN 
     (
      SELECT username, AVG(balance) avg_bal 
      FROM mc25778 
      WHERE status = 0 
      GROUP BY username 
     ) b ON a.username = b.username 
SET  a.balance = b.avg_bal 
WHERE a.username = 'Average' 

UPDATE 당신이 가진 모든 레코드에 대한 전체 평균을 계산 할 것 같습니다 1

status = 0이고 그 결과는 Average

UPDATE mc25778 a 
     CROSS JOIN 
     (
      SELECT AVG(balance) avg_bal 
      FROM mc25778 
      WHERE status = 0 
     ) b 
SET  a.balance = b.avg_bal 
WHERE a.username = 'Average' 
의 레코드로 업데이트됩니다.
+0

흠을 ... 실제로는 영향을받는 행을 말한다 : 0! 나는 틀린 지역 haha에서보고 있었다. 그래서 그것은 작동하지 않습니다 :/ –

+0

원하는 결과로 샘플 레코드를 제공 할 수 있습니까? ':)' –

+0

http://imgur.com/nMAvyev 좋아, 여기 테이블의 레코드를 보여 주는데, 나는 '평균'사용자 이름 하나를 상태가있는 모든 잔액의 평균 = 0, 혼란을 가져 미안해! –

0

것은이 작업을 수행 :

Declare @avg decimal(10,2) 
Set @avg=(SELECT AVG(balance) FROM mc25778 WHERE status = 0) 
UPDATE mc25778 set [email protected] WHERE username="Average"