sql >> Database >  >> RDS >> Mysql

SQL-sortering volgt niet groep per instructie, gebruikt altijd de primaire sleutel

Uitleg voor wat er aan de hand is :

Je voert een GROUP BY . uit op staff.department , maar uw SELECT lijst bevat 2 niet-groeperende kolommen staff.workerID, staff.name . In standaard sql is dit een syntaxisfout, maar MySql staat het toe, zodat de queryschrijvers ervoor moeten zorgen dat ze dergelijke situaties zelf afhandelen.

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

Vanaf MySQL 5.1 kan de niet-standaard functie worden uitgeschakeld door de vlag ONLY_FULL_GROUP_BY in sql_mode in te stellen:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

Oplossen :

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

Haal in de binnenste zoekopdracht de afdeling en het hoogste salaris op met GROUP BY. Voeg vervolgens in de buitenste query die resultaten samen met de hoofdtabel die u de gewenste resultaten zou geven.



  1. Databasequery-efficiëntie maximaliseren voor MySQL - deel één

  2. SET DATEFIRST - Stel de eerste dag van de week in SQL Server in

  3. Hoe drop Unique Constraint-scripts in SQL Server-database te genereren - SQL Server / TSQL-zelfstudie, deel 99

  4. Replicatie-failover voor MySQL en MariaDB beheren