sql >> Databáze >  >> RDS >> Mysql

Třídění SQL se neřídí skupina po příkazu, vždy používá primární klíč

Vysvětlení toho, co se děje :

Provádíte GROUP BY na staff.department , ale váš SELECT seznam obsahuje 2 neseskupující se sloupce staff.workerID, staff.name . Ve standardním SQL je to syntaktická chyba, ale MySql to umožňuje, takže autoři dotazů se musí ujistit, že takové situace řeší sami.

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

Počínaje MySQL 5.1 lze nestandardní funkci zakázat nastavením příznaku ONLY_FULL_GROUP_BY v sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Jak to opravit :

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

Ve vnitřním dotazu načtěte oddělení a jeho nejvyšší plat pomocí GROUP BY. Poté ve vnějším dotazu spojte tyto výsledky s hlavní tabulkou, která vám poskytne požadované výsledky.



  1. předat proměnnou javascript do php mysql select query

  2. Jak převést 1985-02-07T00:00:00.000Z (ISO8601) na hodnotu data v Oracle?

  3. Aplikujte dotaz mysql na každou tabulku v databázi

  4. MySQL GROUP BY věkové rozmezí včetně nulových rozsahů