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

标签 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;

它给出了错误 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #2 包含非聚合列 users.name;这与 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有什么优点和缺点吗? ?性能方面哪个更好?

最佳答案

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

关于mysql - 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #2 包含非聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42021279/

相关文章:

mysql - 灵活的mysql表的动态内容解决方案

mysql - 如何通过命令行或脚本向 phpBB 添加新用户?

php - 查询将直接在 MySQL 上运行,而不是通过 PHP

java - Jtable如何在不同的列中显示来自mysql的数据

php - 为了还是为了?

mysql - 在数据库中存储特定的日期时间格式

sql - Entity Framework 达到2100个参数限制

c# - 更改数据捕获和 linq

mysql - 您会在父表中添加一个owner_id,还是在子表中添加一个is_owner?

database - Geomesa 查询性能