何が起こっているのかについての説明 :
GROUP BY
を実行しています staff.department
に ただし、SELECT
リストには、グループ化されていない2つの列staff.workerID, staff.name
が含まれています 。標準のSQLでは、これは構文エラーですが、MySqlでは許可されているため、クエリ作成者はそのような状況を自分で処理する必要があります。
参照: http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html
MySQL 5.1以降、sql_modeでONLY_FULL_GROUP_BYフラグを設定することにより、非標準機能を無効にできます。 http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by
修正方法 :
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
内部クエリで、GROUPBYを使用して部門とその最高給与を取得します。次に、外部クエリで、これらの結果をメインテーブルと結合します。これにより、目的の結果が得られます。