I allmänhet är ORDER BY i en underfråga meningslös. (Det gör det bara när det kombineras med FETCH FIRST/LIMIT/TOP etc.)
Lösningen är att använda en korrelerad underfråga för att hitta den tyngsta fisken för "huvudfrågans" nuvarande rads användarnamn, plats, artkombination. Om det är oavgjort, kommer båda raderna att returneras.
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)
Observera att röding för vikt fortfarande är ett dåligt val, eftersom du måste kasta båda sidor när du jämför värden. Gå tillbaka till decimal i tabellen!