• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql5.7出现group by查询问题的解决办法分享

Mysql5.7出现group by查询问题的解决办法分享

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了Mysql5.7,group,题的等相关知识,希望本文的分享对您有所帮助
这篇文章主要给大家介绍了关于Mysql升级到5.7后遇到的group by查询问题的解决方法,文中通过示例代码介绍的非常详细,对同样遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

发现问题

最近在将mysql升级到mysql 5.7后,进行一些group by 查询时,比如下面的


SELECT *, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY `inputtime` DESC LIMIT 20

就会报如下错误:


SELECT list is not in GROUP BY clause and contains nonaggregated column ‘news.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by.

原因分析

原因是mysql 5.7 模式中。默认启用了ONLY_FULL_GROUP_BY。

ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查。

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

this is incompatible with sql_mode=only_full_group_by这句话提示了这违背了mysql的规则,only fully group by,也就是说在执行的时候先分组,根据查询的字段(select的字段)在分组的内容中取出,所以查询的字段全部都应该在group by分组条件内;一种情况例外,查询字段中如果含有聚合函数的字段不用包含在group by中,就像我上面的count(id)。

后来发现Order by排序条件的字段也必须要在group by内,排序的字段也是从分组的字段中取出。 不明白的可以去看一下。

解决办法:

1.set@@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_pISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

去掉ONLY_FULL_GROUP_BY即可正常执行sql.

2. 不去ONLY_FULL_GROUP_BY, 时 select字段必须都在group by分组条件内(含有函数的字段除外)。(如果遇到order by也出现这个问题,同理,order by字段也都要在group by内)。

3.利用ANY_VALUE()这个函数 https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

This function is useful for GROUP BY queries when the ONLY_FULL_GROUP_BY SQL mode is enabled, for cases when MySQL rejects a query that you know is valid for reasons that MySQL cannot determine. The function return value and type are the same as the return value and type of its argument, but the function result is not checked for the ONLY_FULL_GROUP_BY SQL mode.

如上面的sql语句可写成


SELECT ANY_VALUE(id)as id,ANY_VALUE(uid) as uid ,ANY_VALUE(username) as username,ANY_VALUE(title) as title,ANY_VALUE(author) as author,ANY_VALUE(thumb) as thumb,ANY_VALUE(description) as description,ANY_VALUE(content) as content,ANY_VALUE(linkurl) as linkurl,ANY_VALUE(url) as url,ANY_VALUE(group_id) as group_id,ANY_VALUE(inputtime) as inputtime, count(id) as count FROM `news` GROUP BY `group_id` ORDER BY ANY_VALUE(inputtime) DESC LIMIT 20

我选用的是第3种方法。

总结

以上就是Mysql5.7出现group by查询问题的解决办法分享的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • centos下安装mysql服务器的方法
  • MySQL 主主同步配置步骤
  • mysql日志文件在哪 如何修改MySQL日志文件位置
  • mysql data文件夹位置查找
  • 强制修改mysql的root密码的六种方法分享(mysql忘记密码)
  • MySQL易学易用之MYSQL不为人知的特性
  • 重置MySQL数据库root密码(linux/windows)
  • linux下讲解MySQL安装与登录方法
  • MySQL 数据类型 详解
  • 通过HSODBC访问mysql的实现步骤

相关文章

  • 2018-12-05总结关于数据库、表注意点
  • 2018-12-05Mysql-索引总结
  • 2018-12-05Win7下mysql root账户登录提示:ERROR 1045 (28000)解决方案
  • 2018-12-05mysql数据库中文乱码的解决方法汇总
  • 2018-12-05详解Oracle查询中OVER (PARTITION BY ..)用法
  • 2018-12-05关于mysql5.7以上版本下载及安装的详细介绍(图文)
  • 2018-12-05关于Mysql元数据如何生成Hive建表语句注释脚本
  • 2017-05-11配置mysql允许远程连接的方法
  • 2017-09-02MySQL优化
  • 2018-12-05SQL 外链接操作小结 inner join left join right join

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL插入数据时插入无效列的解决方法
    • 有关mysql_select_db()的文章推荐
    • MySQL中如何用WHERE子句联结多个表
    • 详解插入记录的用法实例教程
    • mysql 数据库基础笔记
    • mysql 显示SQL语句执行时间的代码
    • 优化SQl的30中常用方法
    • 如何使JDK导入证书
    • 总结和Mysql相关的知识
    • mysql智能存储过程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有