Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le tri SQL ne suit pas l'instruction group by, utilise toujours la clé primaire

Explication de ce qui se passe :

Vous effectuez un GROUP BY sur staff.department , cependant votre SELECT la liste contient 2 colonnes non groupées staff.workerID, staff.name . Dans SQL standard, il s'agit d'une erreur de syntaxe, mais MySql l'autorise donc les rédacteurs de requêtes doivent s'assurer qu'ils gèrent eux-mêmes de telles situations.

Référence :http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html

À partir de MySQL 5.1, la fonctionnalité non standard peut être désactivée en définissant l'indicateur ONLY_FULL_GROUP_BY dans sql_mode :http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Comment réparer :

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

Dans la requête interne, récupérez le service et son salaire le plus élevé à l'aide de GROUP BY. Ensuite, dans la requête externe, joignez ces résultats à la table principale qui vous donnerait les résultats souhaités.