sql >> Databasteknik >  >> RDS >> Mysql

SQL-sortering följer inte grupp för sats, använder alltid primärnyckel

Förklaring till vad som händer :

Du utför en GROUP BYstaff.department , men din SELECT listan innehåller 2 icke-grupperande kolumner staff.workerID, staff.name . I standard sql är detta ett syntaxfel, men MySql tillåter det så att frågeskrivarna måste se till att de hanterar sådana situationer själva.

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

Från och med MySQL 5.1 kan den icke-standardiserade funktionen inaktiveras genom att ställa in flaggan ONLY_FULL_GROUP_BY i sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Så här åtgärdar du :

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 inre frågan, hämta avdelningen och dess högsta lön med hjälp av GROUP BY. I den yttre frågan slå samman dessa resultat med huvudtabellen som skulle ge dig de önskade resultaten.



  1. Undertryck varningsmeddelanden med mysql från terminalen, men lösenordet skrivet i bash-skript

  2. Lösning i mysql för partiellt index eller filtrerat index?

  3. mysql välj tidsstämplar mellan a och b och returnerar alla eller 0 tidsstämplar

  4. Autentiseringsplugin 'caching_sha2_password' stöds inte