Hint on some possible query improvement
Thanks for the test data, makes it much easier. First reflection is that almost all columns are nullable, I wonder whether that's deliberate because it makes querying more difficult. In the sketch below I'll assume that columns are mandatory. You may also want to add the following constraints to game

CHECK( player1 &lt;&gt; player2 )            -- can't play against self
CHECK( results in (player1, player2) ) -- winner must participate 

select p.id, p.name
     , count(case when g1.results = p.id then 1 end) as win
     , count(g1.player1) as games -- any column from g1 will do  
from players p
left join game g1
   on p.id = g1.player1
   or p.id = g1.player2
group by p.id, p.name
order by win DESC, games DESC;


If you make a left join between player and game (given the join condition), you will get all players and all games where player is either player1 or player2.

To count all games we count the rows where either player1 or player2 is not null. Note that we can not count the rows (say with count(*)) since we then would count rows where the player does not participate.

To count the wins we count the rows where the winner match the player.