sql >> Base de Datos >  >> RDS >> Mysql

La clasificación de SQL no sigue el grupo por declaración, siempre usa la clave principal

Explicación de lo que está pasando :

Estás realizando un GROUP BY en staff.department , sin embargo, su SELECT la lista contiene 2 columnas no agrupadas staff.workerID, staff.name . En sql estándar, esto es un error de sintaxis, sin embargo, MySql lo permite, por lo que los escritores de consultas deben asegurarse de manejar tales situaciones por sí mismos.

Referencia:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html

A partir de MySQL 5.1, la función no estándar se puede desactivar configurando el indicador ONLY_FULL_GROUP_BY en sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Cómo solucionarlo :

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

En la consulta interna, obtenga el departamento y su salario más alto usando GROUP BY. Luego, en la consulta externa, combine esos resultados con la tabla principal, lo que le daría los resultados deseados.