Nói chung ORDER BY trong một truy vấn phụ không có ý nghĩa gì. (Nó chỉ hoạt động khi được kết hợp với FETCH FIRST / LIMIT / TOP, v.v.)
Giải pháp là sử dụng truy vấn phụ có tương quan để tìm con cá nặng nhất cho tổ hợp tên người dùng, vị trí, loài hiện tại của hàng "truy vấn chính". Nếu hòa, cả hai hàng sẽ được trả về.
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)
Lưu ý rằng char cho trọng lượng vẫn là một lựa chọn tồi, vì bạn phải ép cả hai bên khi so sánh các giá trị. Quay lại số thập phân trong bảng của bạn!