Giải thích cho những gì đang diễn ra :
Bạn đang thực hiện GROUP BY
trên staff.department
, tuy nhiên SELECT
của bạn danh sách chứa 2 cột không phân nhóm staff.workerID, staff.name
. Trong sql tiêu chuẩn, đây là một lỗi cú pháp, tuy nhiên MySql cho phép nó, vì vậy người viết truy vấn phải đảm bảo rằng họ tự xử lý các tình huống như vậy.
Tham khảo: http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
Bắt đầu với MySQL 5.1, tính năng không chuẩn có thể bị vô hiệu hóa bằng cách đặt cờ ONLY_FULL_GROUP_BY trong sql_mode: http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
Cách khắc phục :
select staff.workerID, staff.name, staff.department, staff.salary
from staff
join (
select staff.department, max(staff.salary) AS biggest
from staff
group by staff.department
) t
on t.department = staff.department and t.biggest = staff.salary
Trong truy vấn bên trong, tìm nạp bộ phận và mức lương cao nhất của bộ phận bằng cách sử dụng GROUP BY. Sau đó, trong truy vấn bên ngoài, hãy nối các kết quả đó với bảng chính để cung cấp cho bạn kết quả mong muốn.