U moet de group by
. lezen clausule.
MySQL is veel toleranter dan het zou moeten, wat verwarring in het proces veroorzaakt. In principe moet elke kolom zonder aggregaat worden opgenomen in de group by
clausule. Maar MySQL-syntactische suiker maakt het mogelijk kolommen te "vergeten". Wanneer je dat doet, spuugt MySQL een willekeurige waarde uit van de set waarop het is gegroepeerd. In jouw geval is de eerste rij in de set bob
, dus het geeft dat terug.
Je eerste statement (met behulp van max()
zonder een group by
) is gewoon onjuist.
Als je een van de oudste gebruikers wilt, order by age desc limit 1
is de juiste manier om verder te gaan.
Als je alle oudste gebruikers wilt, heb je een subselectie nodig:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);