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? – David542
Рассматривайте подвыбор в качестве таблицы. Используйте 'WHERE u.mutual> 0', чтобы отфильтровать нежелательные записи. – vyegorov