Anda perlu membaca di group by
klausa.
MySQL menjadi jauh lebih permisif dari yang seharusnya, menimbulkan kebingungan dalam prosesnya. Pada dasarnya, setiap kolom tanpa agregat harus dimasukkan dalam group by
ayat. Tetapi gula sintaksis MySQL memungkinkan untuk "melupakan" kolom. Ketika Anda melakukannya, MySQL mengeluarkan nilai arbitrer dari set yang dikelompokkan. Dalam kasus Anda, baris pertama dalam himpunan adalah bob
, sehingga mengembalikannya.
Pernyataan pertama Anda (menggunakan max()
tanpa group by
) tidak benar.
Jika Anda ingin salah satu pengguna tertua, order by age desc limit 1
adalah cara yang benar untuk melanjutkan.
Jika Anda ingin semua pengguna terlama, Anda memerlukan subselect:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);