Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A classificação SQL não segue grupo por instrução, sempre usa chave primária


Explicação do que está acontecendo :

Você está realizando um GROUP BY em staff.department , porém seu SELECT list contém 2 colunas não agrupadas staff.workerID, staff.name . No sql padrão, isso é um erro de sintaxe, no entanto, o MySql permite que os escritores de consulta tenham que se certificar de que eles mesmos lidem com essas situações.

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

A partir do MySQL 5.1, o recurso não padrão pode ser desabilitado definindo o sinalizador ONLY_FULL_GROUP_BY em sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Como corrigir :
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

Na consulta interna, busque o departamento e seu salário mais alto usando GROUP BY. Em seguida, na consulta externa, junte esses resultados com a tabela principal que fornecerá os resultados desejados.