web-dev-qa-db-fra.com

La liste SELECT n'est pas dans la clause GROUP BY et contient une colonne non agrégée

Recevoir l'erreur suivante:

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

Lors de l'exécution de la requête suivante:

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 ;

Utilisation de la base de données de tests MySQL World ( http://dev.mysql.com/doc/index-other.html ). Aucune idée pourquoi cela se passe. Exécute actuellement MYSQL 5.7.10.

Des idées??? : O

28
Danny J. Williams

Comme @Brian Riley l’a déjà indiqué, vous devez supprimer 1 colonne de votre choix.

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 ;

ou l'ajouter à votre groupe

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 ;
24
davejal

country.code n'est pas dans votre group by, et n'est pas un agrégat (encapsulé dans une fonction d'agrégat).

https://www.w3schools.com/sql/sql_ref_sqlserver.asp

1
Brian Riley