RECUENTO múltiples en la misma mesa

lastp4:

Tengo una tabla:

   +----------+-----------+----------+--------+
    | id       |  winnerId | loserId  | gameId |
    +----------+-----------+----------+--------+
    | 1        | user1     | user2    |      1 |
    | 2        | user2     | user1    |      1 |
    | 3        | user1     | user2    |      1 |
    | 4        | user1     | user2    |      2 |
      5          user1       user3           1
    +----------+-----------+----------+--------+

En realidad tengo más columnas en la tabla, pero son unreleated pero tenga en cuenta que

Dado winnerId, loserId y gameid me gustaría obtener puntuaciones totales (ganar recuento) de ganadores y perdedores jugadores uno contra el otro

Ejemplo de entrada consulta:

winnerId:user1
loserId:user2
gameId:1

Resultado:

   --userId--totalScore--
       user1      2           
       user2      1
Thorsten Kettner:

Seleccionar las filas en las que los dos jugadores juegan unos contra otros. Luego contar las filas por ganador para el juego:

select winnerid, count(*) 
from mytable
where gameid = 1
and (winnerid, loserid) in ((1,2), (2,1))
group by winnerid;

Demostración: https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=976df92c9706c08d34a1c372735efa4c

EDIT: Si uno de los jugadores nunca ganó contra el otro, no habrá ninguna fila para contar. Si desea ver una fila de resultado con un recuento de cero en ese caso, a continuación, primero debe crear una fila. Una forma es la siguiente:

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;

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373077&siteId=1
Recomendado
Clasificación