Като цяло ORDER BY в подзаявка няма смисъл. (Прави само когато се комбинира с FETCH FIRST/LIMIT/TOP и т.н.)
Решението е да се използва корелирана подзаявка, за да се намери най-тежката риба за потребителското име, местоположението, комбинацията от видове в текущия ред на „главната заявка“. Ако резултатът е равен, и двата реда ще бъдат върнати.
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)
Имайте предвид, че char за тегло все още е лош избор, тъй като трябва да хвърляте и двете страни, когато сравнявате стойности. Върнете се към десетичния знак във вашата таблица!