同じテーブル上の複数のCOUNT

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;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373109&siteId=1