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;
もちろん、最終的な結果は同じです。