私はマッチする選手とそれぞれ得点したポイントの関係テーブルを持っています。私は、彼らがしてきたすべてのチームによって得点された合計得点と合計得点で選手の明確なリストを取得するSELECTをしようとしています。すべてが単一のプレイヤーの面で行われているので、私はその単一の列だけのGROUP BYスコープから抜け出す方法を知らない。以下の例では、各チームに2人のプレイヤーしかいないと言っています。実際のデータベースでは、重要であれば各チームに5つあります。みんなありがとう。複数のGROUP BY行のSUMを選択するにはどうすればよいですか?
表 "マッチ":
match_id | winning_team |
56427859 | 0 |
56427860 | 1 |
56427861 | 1 |
56427862 | 0 |
56427863 | 1 |
etc...
表 "match_players":
match_id | team | player_id | points |
56427859 | 0 | 10 | 3 |
56427859 | 0 | 33 | 1 |
56427859 | 1 | 26 | 0 |
56427859 | 1 | 39 | 2 |
56427860 | 0 | 23 | 1 |
56427860 | 0 | 33 | 3 |
56427860 | 1 | 18 | 1 |
56427860 | 1 | 10 | 4 |
etc...
所望の結果:
player_id | match_count | total_points | team_total_points | <- This should be
the total of all
10 | 2 | 7 | 9 | points scored by
18 | 1 | 1 | 5 | the player and
23 | 1 | 1 | 4 | his teammates
26 | 1 | 0 | 2 | in all matches.
33 | 2 | 4 | 8 |
39 | 1 | 2 | 2 |
クエリ:
SELECT
p.player_id,
COUNT(*) AS match_count,
SUM(CASE WHEN mp.team = m.winning_team THEN 1 ELSE 0 END) AS win_count,
SUM(points) AS total_points,
[________________________________________] AS team_total_points
FROM matches m
INNER JOIN match_players mp ON m.match_id = mp.match_id
INNER JOIN players p ON mp.player_id = p.player_id
GROUP BY player_id
ORDER BY player_id
編集:
「チーム」の欄には、単になどプレイヤーは異なる試合で異なるチームにすることができ、赤や青、自宅や離れて定義します。そして、プレイヤーは、リッジドッジボールのように、試合の間にチームを交換することができます。
どのようにして、 "チーム" を定義していますか? –
申し訳ありません。 2つしかない。チームは基本的に家庭と離れていることを意味します。プレイヤーはいつでもどのチームにいてもかまいません。ドッジボールのように。私は自分の投稿を編集します。 – DaiBu
各プレーヤーのチーム合計を計算するサブクエリを作成します。サブクエリをメインクエリと結合し、合計を空白に入れます。 – Barmar