Sie müssen sich über group by
informieren Klausel.
MySQL ist viel freizügiger als es sollte, was zu Verwirrung im Prozess führt. Grundsätzlich sollte jede Spalte ohne Aggregat in group by
aufgenommen werden Klausel. Aber der syntaktische Zucker von MySQL erlaubt es, Spalten zu "vergessen". Wenn Sie dies tun, spuckt MySQL einen beliebigen Wert aus der Gruppe aus, nach der es gruppiert. In Ihrem Fall ist die erste Zeile im Satz bob
, also gibt es das zurück.
Ihre erste Anweisung (mit max()
ohne group by
) ist einfach falsch.
Wenn Sie einen der ältesten Benutzer haben möchten, order by age desc limit 1
ist die richtige Vorgehensweise.
Wenn Sie alle ältesten Benutzer haben möchten, benötigen Sie eine Unterauswahl:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);