Para hacer esto tienes que separarlos de alguna manera; su problema actual es que los 2 puntajes más bajos son iguales, por lo que cualquier operación de (des)igualdad realizada en cualquiera de los valores trata al otro de manera idéntica.
Podría usar algo como la consulta analítica ROW_NUMBER()
para identificar filas de forma única:
select id, sum(score) / count(score) as score
from ( select id, score, row_number() over (order by score) as score_rank
from gamescore
where gameno = 1
)
where score_rank <> 1
group by id
ROW_NUMBER()
:
Como la cláusula ORDER BY está en SCORE en orden ascendente, se eliminará uno de los puntajes más bajos. Este será un valor aleatorio a menos que agregue otras condiciones de desempate al ORDEN POR.