Có lẽ không phải là giải pháp tốt nhất trong số các giải pháp và hiệu suất của IN
có thể bị ảnh hưởng trên các bảng lớn hơn.
Truy vấn lồng nhau nhận Birthyear
tối thiểu cho mỗi thành phố. Chỉ ghi lại những người có Birthyear
này được so khớp trong truy vấn bên ngoài. Thứ tự theo độ tuổi sau đó giới hạn ở 3 kết quả sẽ cho bạn 3 người lớn tuổi nhất và cũng là người lớn tuổi nhất trong thành phố của họ (Egon Spengler bỏ qua ..)
SELECT Name, City, Birthyear, COUNT(*) AS ct
FROM table
WHERE Birthyear IN (SELECT MIN(Birthyear)
FROM table
GROUP by City)
GROUP BY City
ORDER BY Birthyear DESC LIMIT 3;
+-----------------+-------------+------+----+
| name | city | year | ct |
+-----------------+-------------+------+----+
| Henry Jones | Chicago | 1899 | 1 |
| Mac Taylor | New York | 1955 | 1 |
| Sarah Connor | Los Angeles | 1959 | 1 |
+-----------------+-------------+------+----+
Chỉnh sửa - đã thêm GROUP BY City
vào truy vấn bên ngoài, vì những người có cùng năm sinh sẽ trả về nhiều giá trị. Việc nhóm theo truy vấn bên ngoài đảm bảo rằng chỉ một kết quả sẽ được trả về cho mỗi thành phố, nếu nhiều người có Birthyear
tối thiểu đó . ct
cột sẽ hiển thị nếu có nhiều người tồn tại trong thành phố có Birthyear
đó