lastp4:
私は1つのテーブルを持っています:
+----------+-----------+----------+--------+
| id | winnerId | loserId | gameId |
+----------+-----------+----------+--------+
| 1 | user1 | user2 | 1 |
| 2 | user2 | user1 | 1 |
| 3 | user1 | user2 | 1 |
| 4 | user1 | user2 | 2 |
5 user1 user3 1
+----------+-----------+----------+--------+
実際に私は、テーブル内の複数の列を持っていますが、それらはunreleatedですが、それを考慮してください。
winnerId、loserIdとgameIdを考えると、私は勝者と敗者の選手の合計得点(カウント数を獲得)を取得したいと思いますお互いに対しての
例クエリ入力:
winnerId:user1
loserId:user2
gameId:1
結果:
--userId--totalScore--
user1 2
user2 1
トルステンケトナー:
2人の選手は互いに対戦の行を選択します。そして、ゲームの勝者ごとの行をカウント:
select winnerid, count(*)
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
group by winnerid;
デモ:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=976df92c9706c08d34a1c372735efa4c
EDIT:選手の一人が他の勝ったことがない場合は、数える何行は存在しません。あなたが、その場合にはゼロカウントと結果の行を見たい場合は、最初の行を作成する必要があります。一つの方法はこれです:
select playerid, sum(won)
from
(
select winnerid as playerid, 1 as won
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
union all
select loserid as playerid, 0 as won
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
)
group by playerid
order by playerid;