Obecně nedává ORDER BY v dílčím dotazu smysl. (To pouze v kombinaci s FETCH FIRST/LIMIT/TOP atd.)
Řešením je použití korelovaného dílčího dotazu k nalezení nejtěžší ryby pro aktuální řádek "hlavního dotazu" s uživatelským jménem, umístěním a kombinací druhů. Pokud je to nerozhodné, budou vráceny obě řady.
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)
Všimněte si, že char pro hmotnost je stále špatná volba, protože při porovnávání hodnot musíte použít obě strany. Vraťte se ve své tabulce na desetinné číslo!