在没有GROUP BY的聚合查询中,SELECT列表的表达式#2包含非聚合列

时间:2017-02-03 09:46:49

标签: mysql sql database group-by

select users.name,users.user_id,COUNT(subscribers.user_id) 
from users
LEFT JOIN subscribers 
  ON subscribers.to_id = users.user_id;

它提供错误In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column users.name; this is incompatible with sql_mode=only_full_group_by

我有两种可能的解决方案

  1. 如果我做GROUP BY users.user_id,users.name其固定;但是因为我 在mysql<中写了我的应用程序5.7我必须改变很多 查询(这是一场噩梦)。
  2. 我可以关闭sql_mode=only_full_group_by

    但我不知道这是不是一种坏习惯?是否有任何关闭only_full_group_by的帮助。 ?性能明智哪个更好?

1 个答案:

答案 0 :(得分:1)

从我的观点来看,最好解决问题并解决它们。即纠正应用程序中存在的不正确的查询。因为这些查询不正确,所有列都没有被不可预测的值正确地包含在组中。 (基本上是随机的...第一个遇到的人)..当然,应用程序的大小也有重要的作用,因此要纠正的查询量...这可能会导致正确的任务调度..然后一个受控制的时期你可以选择交换sql_mode ..用于我对性能没有明显影响的检查