Трябва да прочетете group by
клауза.
MySQL е много по-разрешителен, отколкото би трябвало, внасяйки объркване в процеса. По принцип всяка колона без агрегат трябва да бъде включена в group by
клауза. Но синтактичната захар на MySQL позволява да се „забравят“ колоните. Когато го направите, MySQL изхвърля произволна стойност от набора, по който се групира. Във вашия случай първият ред в комплекта е bob
, така че връща това.
Първото ви изявление (използвайки max()
без group by
) е просто неправилно.
Ако искате един от най-възрастните потребители, order by age desc limit 1
е правилният начин да продължите.
Ако искате всички най-стари потребители, имате нужда от подселекция:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);