La consulta que realiza no es correcta para el caso de uso, puede ver la diferencia.
select count(*) as aggregate from game_results
where (school_id is null and season_id = '1')
group by user_id order by user_id asc;
devolverá dos filas
aggregate
1,
2
Eloquent elige primero y devuelve 1.
select count(*) as aggregate from game_results
where (school_id is null and season_id = '1')
group by user_id order by user_id desc;
devolverá filas como
agrregate
2,
1
Elocuente resultará 2 en este caso.
Lo que quieres es el recuento de (consulta) que volverá a ser 2.
¿Conseguirlo? lo que quieres es DISTINTO
$usersWithAnswersCount = GameResult::where([
'school_id' => null,
'season_id' => $this->season->id
])
->distinct('user_id')
->count();