1

ここで相互フィールドの合計を取得するにはどうすればよいですか?

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)つまり、相互 = 1 の (first_user_id + second_user_id)を取得したいということです。

4

3 に答える 3

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;

もちろん、最終的な結果は同じです。

于 2012-04-07T06:12:28.817 に答える
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
于 2012-04-07T06:15:06.800 に答える
0
Select sum(field) from (
  Select ....
  Union all 
  Select ....
 ) atable
where ....
于 2012-04-07T06:11:07.803 に答える