sql >> Base de Datos >  >> RDS >> Mysql

mySQL Mayor número por grupo

En general ORDER BY en una subconsulta no tiene sentido. (Solo funciona cuando se combina con FETCH FIRST/LIMIT/TOP, etc.)

La solución es utilizar una subconsulta correlacionada para encontrar el pez más pesado para el nombre de usuario, la ubicación y la combinación de especies de la fila actual de la "consulta principal". Si hay empate, se devolverán ambas filas.

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)

Tenga en cuenta que char para el peso sigue siendo una mala elección, debido a que debe lanzar ambos lados al comparar valores. ¡Vuelve al decimal en tu tabla!