Im Allgemeinen macht ORDER BY in einer Unterabfrage keinen Sinn. (Nur in Kombination mit FETCH FIRST/LIMIT/TOP etc.)
Die Lösung besteht darin, eine korrelierte Unterabfrage zu verwenden, um den schwersten Fisch für die Kombination aus Benutzername, Ort und Art der aktuellen Zeile der "Hauptabfrage" zu finden. Bei Gleichstand werden beide Zeilen zurückgegeben.
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)
Beachten Sie, dass char für Gewicht immer noch eine schlechte Wahl ist, da Sie beim Vergleichen von Werten beide Seiten werfen müssen. Gehen Sie zurück zur Dezimalzahl in Ihrer Tabelle!