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);