SELECT列表不在GROUP BY子句中,并且包含非聚合列。

9 浏览
0 Comments

SELECT列表不在GROUP BY子句中,并且包含非聚合列。

收到以下错误:\n

选择列表的表达式#2不在GROUP BY子句中,并且包含非聚合列'world.country.Code',该列与GROUP BY子句中的列没有函数依赖关系。 这与sql_mode = only_full_group_by不兼容

\n运行以下查询时出错:\n

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 ;

\n使用MySQL world测试数据库(http://dev.mysql.com/doc/index-other.html)。不知道为什么会发生这种情况。目前正在运行MYSQL 5.7.10。\n有任何想法吗???:O

0
0 Comments

SELECT list is not in GROUP BY clause and contains nonaggregated column这个问题的出现的原因是在SQL查询语句中,SELECT子句中的列没有包含在GROUP BY子句中,并且这些列不是聚合函数的参数。这个问题的解决方法是将SELECT子句中的非聚合列添加到GROUP BY子句中。

在SQL查询中,GROUP BY子句用于将结果集按照指定的列进行分组,而SELECT子句则用于选择要显示的列。当在SELECT子句中使用非聚合列时,如果这些列没有包含在GROUP BY子句中,就会出现SELECT list is not in GROUP BY clause and contains nonaggregated column的错误。

解决这个问题的方法是将SELECT子句中的非聚合列添加到GROUP BY子句中。这样做可以确保查询结果按照指定的列进行分组,并且非聚合列的值是唯一的。例如,如果我们有一个名为country的表,其中包含code和name两列,我们想要按照code进行分组,并显示每个分组的name列的值,可以使用以下查询语句:

SELECT code, name
FROM country
GROUP BY code, name

在这个例子中,我们将code和name列都包含在了GROUP BY子句中,确保了查询结果的正确性。

需要注意的是,如果我们只想要按照code进行分组,并显示每个分组的name列的值,而不需要显示code列的值,可以将code列从SELECT子句中移除,只保留name列,并将name列添加到GROUP BY子句中:

SELECT name
FROM country
GROUP BY code, name

这样做可以解决SELECT list is not in GROUP BY clause and contains nonaggregated column的问题,并得到正确的查询结果。

总结起来,SELECT list is not in GROUP BY clause and contains nonaggregated column错误的出现原因是在SQL查询语句中,SELECT子句中的列没有包含在GROUP BY子句中,并且这些列不是聚合函数的参数。解决这个问题的方法是将SELECT子句中的非聚合列添加到GROUP BY子句中。这样做可以确保查询结果按照指定的列进行分组,并且非聚合列的值是唯一的。

0
0 Comments

问题出现的原因是SELECT语句中的列不在GROUP BY子句中,并且包含了非聚合列。这是因为MySQL在启用了ONLY_FULL_GROUP_BY模式时,要求SELECT语句中的列要么在GROUP BY子句中,要么是聚合函数。

解决方法有以下几种:

1. 在SELECT语句中删除一个列,使其只包含在GROUP BY子句中的列或聚合函数。

2. 将不在GROUP BY子句中的列添加到GROUP BY子句中,以满足MySQL的要求。

3. 通过在MySQL命令行中运行以下命令来设置全局的sql_mode:SET GLOBAL sql_mode=(SELECT REPLACE(@_mode,'ONLY_FULL_GROUP_BY','')); 这个方法运行后没有效果。

4. 此外,还可以在会话中额外设置sql_mode,通过以下命令:SET SESSION sql_mode=(SELECT REPLACE(@_mode,'ONLY_FULL_GROUP_BY',''));

这些解决方法可以帮助解决(SELECT list is not in GROUP BY clause and contains nonaggregated column)这个问题。

0