Mysql
 sql >> Database >  >> RDS >> Mysql

L'ordinamento SQL non segue l'istruzione gruppo per, utilizza sempre la chiave primaria

Spiegazione di cosa sta succedendo :

Stai eseguendo un GROUP BY su staff.department , tuttavia il tuo SELECT list contiene 2 colonne non di raggruppamento staff.workerID, staff.name . In SQL standard si tratta di un errore di sintassi, tuttavia MySql lo consente in modo che gli autori di query debbano assicurarsi di gestire tali situazioni da soli.

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

A partire da MySQL 5.1 la funzionalità non standard può essere disabilitata impostando il flag ONLY_FULL_GROUP_BY in sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Come risolvere :

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

Nella query interna, recupera il reparto e il suo stipendio più alto utilizzando GROUP BY. Quindi nella query esterna unisci quei risultati con la tabella principale che ti darebbe i risultati desiderati.