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

SQL-sortering følger ikke gruppe for sætning, bruger altid primærnøgle

Forklaring på, hvad der foregår :

Du udfører en GROUP BYstaff.department , men din SELECT listen indeholder 2 ikke-grupperende kolonner staff.workerID, staff.name . I standard sql er dette en syntaksfejl, men MySql tillader det, så forespørgselsskriverne skal sikre sig, at de selv håndterer sådanne situationer.

Reference:http://dev.mysql.com /doc/refman/5.0/da/group-by-handling.html

Fra og med MySQL 5.1 kan ikke-standardfunktionen deaktiveres ved at indstille ONLY_FULL_GROUP_BY flaget i sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Sådan løser du problemet :

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

I den indre forespørgsel skal du hente afdelingen og dens højeste løn ved at bruge GROUP BY. I den ydre forespørgsel forenes disse resultater med hovedtabellen, som ville give dig de ønskede resultater.



  1. Skal jeg bruge CASCADE DELETE-reglen?

  2. Sådan eksporteres data fra SQL Server 2005 til MySQL

  3. SQL Server Backup Check

  4. Kopiér række men med nyt id