Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die SQL-Sortierung folgt nicht der Gruppe nach Anweisung, sondern verwendet immer den Primärschlüssel

Erklärung für das, was vor sich geht :

Sie führen ein GROUP BY durch auf staff.department , jedoch Ihr SELECT list enthält 2 nicht gruppierende Spalten staff.workerID, staff.name . In Standard-SQL ist dies ein Syntaxfehler, MySql erlaubt dies jedoch, sodass die Abfrageautoren sicherstellen müssen, dass sie solche Situationen selbst handhaben.

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

Beginnend mit MySQL 5.1 kann die Nicht-Standard-Funktion deaktiviert werden, indem das Flag ONLY_FULL_GROUP_BY in sql_mode gesetzt wird:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Behebung :

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

Holen Sie in der inneren Abfrage mit GROUP BY die Abteilung und ihr höchstes Gehalt. Verbinden Sie dann in der äußeren Abfrage diese Ergebnisse mit der Haupttabelle, was Ihnen die gewünschten Ergebnisse liefern würde.