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
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;