2012-04-07 7 views
1

Как мне получить SUM от взаимного поля здесь?Получите сумму поля в 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 

Другими словами, я хочу, чтобы получить SUM(mutual) для (first_user_id + second_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; 

Оптимизатор может также подтолкнуть состояние вниз в UNION запросов, так что выполнить бы, как если бы запрос был написан:

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

Спасибо, и как бы я избавился от записей, где взаимно = 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 
Смежные вопросы