2016-06-16 1 views
0

を選択:プレイヤーP1がゲームに参加すると(それがゲーム1で、ゲーム3で起こるように)複雑mysqlの私は、次の表(それの簡易版)からいくつかのデータを選択する必要があり

game player v1 v2 
1  p1  2  3 
1  p1  1  2 
1  p2  5  3 
1  p3  6  7 
1  p3  2  1 
2  p4  4  6 
2  p2  2  1 
2  p3  3  4 
3  p1  4  9 
3  p3  5  3 
... 
n  p3  3  4 
n  p2  4  9 
n  p3  5  3 

をゲームで、そのプレイヤーp1のすべてのv2観測値の合計を選択します。 プレイヤーp1がゲームに参加していないとき(ゲーム2とゲームnのように)、全プレイヤーのすべてのv1観測値の合計をゲームで選択します。特定のゲームに参加していなくても、すべてのゲームのすべてのプレイヤーの情報が必要です。

game player v 
1  p1  5 (v2: 3+2) 
1  p2  3 (v2: 3) 
1  p3  8 (v2: 7+1) 
1  p4  16 (v1: 2+1+5+6+2) 
2  p1  9 (v1: 4+2+3) 
2  p2  1 (v2: 1) 
2  p3  4 (v2: 4) 
2  p4  6 (v2: 6) 
3  p1  9 (v2: 9) 
3  p2  9 (v1: 4+5) 
3  p3  3 (v2: 3) 
3  p4  9 (v1: 4+5) 
... 
n  p1  12 (v1: 3+4+5) 
n  p2  9 (v2: 9) 
n  p3  3 (v2: 3) 
n  p4  12 (v1: 3+4+5) 

私は非常にあなたの助けをいただければ幸いです。

これは私が見つけたい最終的な結果です。どうもありがとうございました。

答えて

1

2つのサマリーでは条件によって異なるグループが使用されるため、ゲームとプレイヤーのデカルト製品に結合されたままの2つのサブクエリで合計を生成することしか考えられません。

私はあなたがプレーヤーのすべてのプレーヤーをリストするマスターデータテーブルも持っていると仮定します。以下の例では、それをplayersと呼んでいます。私はgamesと上記の表を参照してください。

select 
    t1.game, 
    p.player, 
    case 
     when t2.player is null then t3.sumv1 
     else t2.sumv2 
    end as v 
from (select distinct game from games) t1 
inner join players p --note the lack of join condition, I'm creating a Cartesian join 
left join (select game, player, sum(v2) as sumv2 from games group by game, player) t2 on t1.game=t2.game and p.player=t2.player 
left join (select game, sum(v1) as sumv1 from games group by game) t3 on t1.game=t3.game 
+0

少し説明してください。 – Javi

+0

サブクエリのエイリアステーブルとして3つのサブクエリを使用していますが、テーブル名のようにエイリアスを使用しています。 – Shadow

+0

OK、Iveは試してみましたが、 – Javi

関連する問題