La query che stai facendo non è corretta per il caso d'uso, puoi vedere la differenza.
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;
restituirà due righe
aggregate
1,
2
Eloquente sceglie prima e ritorna che è 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;
restituirà le righe come
agrregate
2,
1
Eloquent risulterà 2 in questo caso.
Quello che vuoi è il conteggio di (query) che sarà di nuovo 2.
Ottenerlo? quello che vuoi è DISTINCT
$usersWithAnswersCount = GameResult::where([
'school_id' => null,
'season_id' => $this->season->id
])
->distinct('user_id')
->count();