Vous devez vous renseigner sur le group by
clause.
MySQL est beaucoup plus permissif qu'il ne le devrait, introduisant de la confusion dans le processus. Fondamentalement, toute colonne sans agrégat doit être incluse dans le group by
clause. Mais le sucre syntaxique MySQL permet "d'oublier" les colonnes. Lorsque vous le faites, MySQL crache une valeur arbitraire à partir de l'ensemble par lequel il se regroupe. Dans votre cas, la première ligne de l'ensemble est bob
, il renvoie donc cela.
Votre première déclaration (en utilisant max()
sans group by
) est tout simplement incorrect.
Si vous voulez l'un des utilisateurs les plus anciens, order by age desc limit 1
est la bonne façon de procéder.
Si vous voulez tous les utilisateurs les plus anciens, vous avez besoin d'une sous-sélection :
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);