Musíte si přečíst group by
doložka.
MySQL je mnohem tolerantnější, než by mělo, což vnáší do procesu zmatek. V zásadě by každý sloupec bez agregace měl být zahrnut do group by
doložka. Ale syntaktický cukr MySQL umožňuje "zapomenout" sloupce. Když to uděláte, MySQL vyplivne libovolnou hodnotu ze sady, podle které je seskupená. Ve vašem případě je první řádek v sadě bob
, takže to vrátí.
Váš první příkaz (pomocí max()
bez group by
) je prostě nesprávný.
Pokud chcete jednoho z nejstarších uživatelů, order by age desc limit 1
je správný způsob, jak pokračovat.
Pokud chcete všechny nejstarší uživatele, potřebujete podvýběr:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);