Mysql
 sql >> Database >  >> RDS >> Mysql

mySQL Numero più alto per gruppo

In generale ORDER BY in una sottoquery non ha senso. (Lo fa solo se combinato con FETCH FIRST/LIMIT/TOP ecc.)

La soluzione consiste nell'utilizzare una sottoquery correlata per trovare il pesce più pesante per la combinazione di nome utente, posizione e specie della riga corrente della "query principale". In caso di pareggio, verranno restituite entrambe le righe.

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)

Nota che il carattere per il peso è ancora una cattiva scelta, perché devi lanciare entrambi i lati quando confronti i valori. Torna al decimale nella tua tabella!