2012-04-07 3 views
1

여기에 상호 필드의 SUM을 얻으려면 어떻게해야합니까? 나는 (first_user_id + second_user_id)에 대한 SUM(mutual)을 얻으려면 즉SQL UNION의 필드 합계를 얻으십시오

SELECT first_user_id, mutual 
    FROM userprofile_usercontact 
UNION ALL 
SELECT second_user_id, mutual 
    FROM userprofile_usercontact 
GROUP BY first_user_id 

경우 상호 = 1

답변

2
SELECT u.user_id, SUM(u.mutual) 
    FROM (SELECT first_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     UNION ALL 
     SELECT second_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     ) AS u 
GROUP BY user_id; 

주석의 질문은 묻습니다 :

방법 상호 = 0 인 항목을 없애겠습니까? 필터 조건을 사용하여

, 평소와 같이 : 그것은 쿼리가 기록 된 것처럼 실행 할 수 있도록 최적화는 물론, 연합 쿼리에 아래 조건을 밀어 수

SELECT u.user_id, SUM(u.mutual) 
    FROM (SELECT first_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     UNION ALL 
     SELECT second_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     ) AS u 
WHERE u.mutual != 0 -- or u.mutual <> 0 
GROUP BY user_id; 

:

SELECT u.user_id, SUM(u.mutual) 
    FROM (SELECT first_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     WHERE mutual != 0 
     UNION ALL 
     SELECT second_user_id AS user_id, mutual 
      FROM userprofile_usercontact 
     WHERE mutual != 0 
     ) AS u 
GROUP BY user_id; 

그물 결과는 물론 동일합니다.

+0

감사합니다. 항목을 없애려면 mutual = 0을 어떻게 사용합니까? – David542

+1

하위 선택을 표로 처리하십시오. 'WHERE u.mutual> 0'을 사용하여 원하지 않는 항목을 걸러 낸다. – vyegorov

0
Select sum(field) from (
    Select .... 
    Union all 
    Select .... 
) atable 
where .... 
1
SELECT SUM(mutual) sm, user_id FROM 
(SELECT first_user_id user_id, mutual 
    FROM userprofile_usercontact 
    UNION ALL 
    SELECT second_user_id, mutual 
     FROM userprofile_usercontact 
     GROUP BY first_user_id) s 

    GROUP BY user_id ORDER BY sm DESC 
관련 문제