Generalnie ORDER BY w podzapytaniu nie ma sensu. (Działa tylko w połączeniu z FETCH FIRST/LIMIT/TOP itp.)
Rozwiązaniem jest użycie skorelowanego podzapytania w celu znalezienia najcięższej ryby dla nazwy użytkownika, lokalizacji i kombinacji gatunków w bieżącym wierszu „głównego zapytania”. Jeśli jest remis, oba wiersze zostaną zwrócone.
SELECT *
FROM entries e1
WHERE username = :user
AND CAST(weight AS DECIMAL(9,3)) = (select max(CAST(weight AS DECIMAL(9,3)))
from entries e2
where e1.username = e2.username
and e1.location = e2.location
and e1.species = e2.species)
Zwróć uwagę, że char dla wagi jest nadal złym wyborem, ponieważ przy porównywaniu wartości musisz rzucić obie strony. Wróć do dziesiętnych w swojej tabeli!