2016-05-22 25 views
0

2つのテーブルがあり、2つのカラムの合計(各テーブルに1つ)を取得する必要があります。2つのテーブルの2つのカラムの合計

  • テーブルゲーム(id_tournament、id_game、電子メール、ポイント)PK(id_tournament、id_game、電子メール)
  • テーブル結果(id_tournament、電子メール、ポイント)PK(id_tournament、電子メール)
  • テーブルユーザー(id_user 、電子メール、名)PK(id_user)

例テーブル結果:

1,[email protected],3 
1,[email protected],4 

例テーブルゲーム:

1,1,[email protected],5 
1,2,[email protected],3 
1,3,[email protected],2 
1,1,[email protected],4 
1,3,[email protected],2 

例テーブルユーザー:

1,[email protected],John 
2,[email protected],Peter 

私の出力は次のようになります。

John 13 
Peter 10 

私は

SELECT t3.name, SUM(t1.points+t2.points) as Total 
FROM user t3, games t1, results t2 
WHERE t1.email=t2.email AND t2.email=t3.email AND t1.id_tournament=t2.tournament 
GROUP BY t1.email 
ORDER BY Total DESC 

を使用しようとしましたが、非常に不思議数を得ました。

+1

'から来ている、ちょうどグループを削除し、合計します。 (代わりに列を表示すると、特定のユーザーに対してこれを行うことができ、自分で数学を行うことができます。)結合が問題を引き起こすことがわかります。これはスペンサーの答えで修正することができます。 –

答えて

2

ゲームテーブルからの合計得点と結果テーブルからの合計得点を別々に得て合計します。

このような何か:

SELECT v.name 
     , SUM(v.points) AS points 
    FROM (
      SELECT gu.name 
       , SUM(g.points) AS points 
      FROM games g 
      JOIN user gu 
       ON gu.email = g.email 
      GROUP BY gu.name 

      UNION ALL 

      SELECT ru.name 
       , SUM(r.points) AS points 
      FROM results r 
      JOIN user ru 
       ON ru.email = r.email 
      GROUP BY ru.name 
     ) v 
    GROUP BY v.name 
    ORDER BY v.name 

EDIT

は、BY句不足しているグループを追加しました。あなたはどこ `不思議数を見たい場合は

我々はゲームや結果には、関連する行がない場合でも、ユーザテーブルから名前のすべて値を返す必要がある場合は...

SELECT n.name 
     , IFNULL(SUM(v.points),0) AS points 
    FROM users n 
    LEFT 
    JOIN (
      SELECT gu.name 
       , SUM(g.points) AS points 
      FROM games g 
      JOIN user gu 
       ON gu.email = g.email 
      GROUP BY gu.name 

      UNION ALL 

      SELECT ru.name 
       , SUM(r.points) AS points 
      FROM results r 
      JOIN user ru 
       ON ru.email = r.email 
      GROUP BY ru.name 
     ) v 
     ON v.name = n.name 
    GROUP BY n.name 
    ORDER BY n.name 
+0

これは両方のテーブルからのすべてのユーザーのポイントを合計します。私は2つの数字しか持っていません。私は、テーブルのユーザーからのすべてのユーザーを一覧表示し、ユーザーの電子メールに基づいて両方のテーブルからポイントを合計する必要があります。 – otis

+0

@otis:GROUP BY句が欠けていました。 (MySQL以外のデータベースではエラーが発生しました)修正が適用されました。 – spencer7593

+0

先生、ありがとうございました! (下から3行目にエラーがあるだけで、ON v.name = n.nameにする必要があります) – otis

関連する問題