2016-01-21 5 views
10

den folgenden Fehler empfangen:SELECT-Liste ist nicht in GROUP BY-Klausel und enthält nicht aggregierten Spalte

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'world.country.Code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

Wenn Sie die folgende Abfrage ausgeführt wird:

select countrylanguage.language, country.code, sum(country.population*countrylanguage.percentage/100) 
from countrylanguage 
join country on countrylanguage.countrycode = country.code 
group by countrylanguage.language 
order by sum(country.population*countrylanguage.percentage) desc ; 

Verwendung des MySQL-Welt Testdatenbank (http://dev.mysql.com/doc/index-other.html). Keine Ahnung, warum das passiert. Derzeit läuft MYSQL 5.7.10.

Irgendwelche Ideen ??? : O

+1

Sie haben fügen Sie die 'ONLY_FULL_GROUP_BY' Option aktiviert, wodurch MySQL die entspannten Regeln für 'GROUP BY' entfernt. – Barmar

+0

Der Standardwert für diese Option wurde in MySQL 5.7 geändert. – Barmar

Antwort

1

country.code ist nicht in Ihrer group by Anweisung, und ist kein Aggregat (in einer Aggregatfunktion verpackt).

http://www.w3schools.com/sql/sql_functions.asp

+0

Der Link funktioniert nicht mehr, versuchen Sie, den tatsächlichen Inhalt anstelle von Hyperlinks zu posten, während Sie antworten. – amey

11

Wie @ Brian Riley bereits gesagt, sollten Sie entweder 1 Spalte in der Auswahl

select countrylanguage.language ,sum(country.population*countrylanguage.percentage/100) 
from countrylanguage 
join country on countrylanguage.countrycode = country.code 
group by countrylanguage.language 
order by sum(country.population*countrylanguage.percentage) desc ; 

entfernen oder es zu Ihrer Gruppierung

select countrylanguage.language, country.code, sum(country.population*countrylanguage.percentage/100) 
from countrylanguage 
join country on countrylanguage.countrycode = country.code 
group by countrylanguage.language, country.code 
order by sum(country.population*countrylanguage.percentage) desc ; 
+0

Vielen Dank dafür. Das hat sehr geholfen! – racl101

+0

oder einfach von der mysql-Befehlszeile ausführen: SET GLOBAL sql_mode = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', '')); –