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;
Die Frage im Kommentar fragt:
Wie Würde ich die Einträge loswerden, wo gegenseitige = 0?
eine Filterbedingung verwenden, wie üblich:
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;
Der Optimierer kann auch den Zustand nach unten in die UNION-Abfragen schieben, so dass es wie ausführen würde, wenn die Abfrage geschrieben wurde:
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;
Das Nettoergebnis ist natürlich das gleiche.
Vielen Dank, und wie würde ich Einträge, wo gegenseitige = 0? – David542
Behandle die Unterauswahl als Tabelle. Verwende 'WHERE u.Mutual> 0', um unerwünschte Einträge herauszufiltern. – vyegorov