Bạn cần đọc trên nhóm group by
mệnh đề.
MySQL đang dễ dãi hơn rất nhiều so với mức cần thiết, gây ra sự nhầm lẫn trong quá trình này. Về cơ bản, bất kỳ cột nào không có tổng hợp sẽ được đưa vào nhóm group by
mệnh đề. Nhưng đường cú pháp MySQL cho phép "quên" các cột. Khi bạn làm như vậy, MySQL sẽ xuất ra một giá trị tùy ý từ tập hợp mà nó đang nhóm lại. Trong trường hợp của bạn, hàng đầu tiên trong tập hợp là bob
, vì vậy nó trả về điều đó.
Câu lệnh đầu tiên của bạn (sử dụng max()
không có nhóm group by
) đơn giản là không chính xác.
Nếu bạn muốn một trong những người dùng lớn tuổi nhất, hãy order by age desc limit 1
là cách chính xác để tiếp tục.
Nếu bạn muốn có tất cả những người dùng lâu đời nhất, bạn cần có một lựa chọn phụ:
SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);