mysql 5.7使用group by查询报错

mysql 5.7使用group by查询报错解决方案

报错内容

SELECT list is not in GROUP BY clause and contains nonaggregated column...

错误原因

  • MySQL5.7.5only_full_group_by成为sql_mode的默认选项之一,导致一些sql语句失效,比如group by进行分组查询

查看sql_mode配置

  • 在命令行输入命令查看sql_model配置:
select @@sql_mode;
  • 如果查询结果有ONLY_FULL_GROUP_BY, 即为报错的原因

解决方案

  • 打开MySQL安装目录下的my.ini文件,如果没有就创建,在文件的末尾添加:
sql_mode = STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
  • 保存后重启MySQL

错误分析

  • only_full_group_by: 确保group by查询是条件有且只有唯一确定的字段
    • 上述报错的原因在于select字段里包含了没有被group by条件唯一确定的字段fields
  • 示例:
name country
张明 魏国
柳阳 魏国
李峰 蜀国
张一铭 蜀国
  • 查询有多少国家:
select country from 表名 group by country;

这样的查询没有问题

  • 如果这样查询:
select name,country from 表名 group by country;

因为执行group by语句实际上将同一组内多行纪录合并成一行, 同一个国家name并不相同,搜索引擎不知道该返回哪一条,违背了ONLY_FULL_GROUP_BY原则报错

  • 因此在非必要还是不要去掉ONLY_FULL_GROUP_BY,错误是SQL语句本身存在问题
发布了113 篇原创文章 · 获赞 95 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JewaveOxford/article/details/103669591