Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL сортирането не следва група по оператор, винаги използва първичен ключ

Обяснение за случващото се :

Изпълнявате GROUP BY на staff.department , но вашият SELECT списъкът съдържа 2 негрупиращи колони staff.workerID, staff.name . В стандартния sql това е синтактична грешка, но MySql го позволява, така че авторите на заявки трябва да се уверят, че сами се справят с такива ситуации.

Справка:http://dev.mysql.com /doc/refman/5.0/en/group-by-handling.html

Започвайки с MySQL 5.1, нестандартната функция може да бъде деактивирана чрез задаване на флага ONLY_FULL_GROUP_BY в sql_mode:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Как да коригирам :

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

Във вътрешната заявка извличане на отдел и най-високата му заплата с помощта на GROUP BY. След това във външната заявка съединете тези резултати с основната таблица, която ще ви даде желаните резултати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Повреждане на базата данни с MariaDB:Таблица не съществува в двигателя

  2. Многократна производителност на MySQL вмъкване

  3. Използване на MySQL с Django - Достъпът е отказан за потребител '@'localhost

  4. mysql превръща множество редове в колони в един ред

  5. MySQL динамична връзка за извличане на десния ред