Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mySQL Maior número por grupo


Em geral ORDER BY em uma subconsulta não faz sentido. (Só funciona quando combinado com FETCH FIRST/LIMIT/TOP etc.)

A solução é usar uma subconsulta correlacionada para encontrar o peixe mais pesado para o nome de usuário, localização e combinação de espécies da linha atual da "consulta principal". Se houver empate, ambas as linhas serão devolvidas.
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)

Note que char para peso ainda é uma má escolha, porque você tem que converter os dois lados ao comparar valores. Volte para decimal em sua tabela!