group by
を読む必要があります 条項。
MySQLは本来よりもはるかに寛容であり、プロセスに混乱をもたらしています。基本的に、集計のない列はすべてgroup by
に含める必要があります 句。しかし、MySQLの構文糖衣構文では、列を「忘れる」ことができます。これを行うと、MySQLはグループ化するセットから任意の値を吐き出します。あなたの場合、セットの最初の行はbob
です。 、それでそれを返します。
最初のステートメント(max()
を使用 group by
なし )は単に間違っています。
最も古いユーザーの1人が必要な場合は、order by age desc limit 1
続行する正しい方法です。
最も古いユーザーをすべて必要とする場合は、副選択が必要です:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);