Du skal læse op på group by
klausul.
MySQL er meget mere eftergivende, end det burde, hvilket introducerer forvirring i processen. Grundlæggende bør enhver kolonne uden et aggregat inkluderes i group by
klausul. Men MySQL syntaktisk sukker gør det muligt at "glemme" kolonner. Når du gør det, spytter MySQL en vilkårlig værdi ud fra det sæt, som det grupperer efter. I dit tilfælde er den første række i sættet bob
, så det returnerer det.
Dit første udsagn (ved hjælp af max()
uden en group by
) er simpelthen forkert.
Hvis du vil have en af de ældste brugere, order by age desc limit 1
er den rigtige måde at fortsætte på.
Hvis du vil have alle de ældste brugere, skal du have et undervalg:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);