Musisz przeczytać o group by
klauzula.
MySQL jest o wiele bardziej liberalny niż powinien, wprowadzając zamieszanie w procesie. Zasadniczo każda kolumna bez agregatu powinna być uwzględniona w group by
klauzula. Ale cukier składniowy MySQL pozwala „zapomnieć” o kolumnach. Kiedy to zrobisz, MySQL wypluwa dowolną wartość z zestawu, według którego grupuje. W twoim przypadku pierwszy wiersz w zestawie to bob
, więc to zwraca.
Twoje pierwsze oświadczenie (za pomocą max()
bez group by
) jest po prostu niepoprawne.
Jeśli chcesz jednego z najstarszych użytkowników, order by age desc limit 1
to właściwy sposób postępowania.
Jeśli chcesz wszystkich najstarszych użytkowników, potrzebujesz podwyboru:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);