当前位置: 首页 > news >正文

MySql 8.0版本使用select group by报错的解决方案

好文推荐:

MySQL查询语句执行顺序以及各关键字的详解,并实战分组后每组显示前几条数据

目录

  • 背景
  • 原因
  • 方案一:修改查询语句
    • 方法一
    • 方法二
  • 方案三:临时方案
  • 方案三:永久解决

背景

在实际工作中,我们经常会使用mysql 8.0版本的group by来对数据进行分组操作,可以用分组求和,分组计数,分组求平均值等等。但是在使用的时候会遇到这一种情况,例如执行sql如下:

selectid,product_id,sum(amount)fromordergroupbyproduct_id

然后执行sql报错如下:
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因

MySql5.7及以上 GROUP BY 报错问题,因为SELECT 查询中的非聚合列没有明确地出现在 GROUP BY 子句中,则会报错,上面的sql中select的id字段没有出现在GROUP BY 子句中

方案一:修改查询语句

方法一

确保 SELECT 中的所有非聚合列都出现在 GROUP BY 子句中。

selectid,product_id,sum(amount)fromordergroupbyproduct_id,id

方法二

如果某些列不需要分组,但你又需要它们出现在结果中,可以使用聚合函数来处理这些列。

selectmax(id),product_id,sum(amount)fromordergroupbyproduct_id,id

方案三:临时方案

如果你确定查询逻辑是正确的,并且不想修改查询语句,可以通过修改 MySQL 的 sql_mode 来禁用 only_full_group_by 模式。但是这是临时的,推出该会话就会失效

SETSESSIONsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

方案三:永久解决

  1. 打开mysql安装目录,找到my.ini文件
  2. 在【mysqld】中添加以下配置
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

  1. 保存,重启mysql即可

如果看到这里,说明你喜欢这篇文章,请转发,点赞。关注微信公众号微信搜索【老板来一杯java】,然后在公众号回复【加群】即可获取【java基础经典面试】一份 和【DDD领域驱动设计实战落地解惑】PDF一份!

推荐好文:
2.5万字讲解DDD领域驱动设计,从理论到实践掌握DDD分层架构设计

http://www.jsqmd.com/news/447057/

相关文章:

  • 大数据-241 离线数仓 - 实战:电商核心交易数据模型与 MySQL 源表设计(订单/商品/品类/店铺/支付)
  • 解决Component组件化框架的10个常见问题:新手必备解决方案
  • 怎样下载安装使用nvm,并安装node和npm
  • Atom Package Manager深度解析:核心功能与架构原理
  • Mockery包管理终极指南:InPackage vs KeepTree模式深度对比
  • OS6.【Linux】基本指令入门(5)
  • 探索Win-SSHFS安全机制:如何保护你的远程文件传输
  • dockerfiles项目贡献指南:如何提交PR分享你的Dockerfile文件
  • 7分钟掌握Git快速统计工具:从安装到高级分析的完整指南
  • 2025终极指南:如何用dh-virtualenv构建隔离式Python Debian包的完整实践
  • 交通数据实时获取指南:基于awesome-public-real-time-datasets的实践教程
  • Transactional Email Templates终极指南:5个实用自定义技巧打造完美邮件体验
  • Riverpod状态持久化终极指南:如何实现离线支持和数据缓存
  • video.min.js videojs播放器插件使用详解
  • 拉格朗日插值算法原理及简单示例
  • 终极指南:为什么选择Lovefield关系型数据库而非IndexedDB
  • 银行家算法-安全性检查算法(C语言实现)
  • 终极指南:如何用vex.js插件系统打造自定义对话框
  • xctool测试报告分析终极指南:5分钟快速解读JUnit和Phabricator报告
  • 不同输入函数的区别比较及send和sendline使用
  • 为什么React Dev Inspector是2024年前端开发的必备工具?
  • 如何快速掌握Mio高性能I/O库:探索os-poll和net核心功能的终极指南
  • 如何快速生成精准上传漏洞字典?upload-fuzz-dic-builder完全使用指南
  • 交流异步电动机变频矢量控制仿真的控制效果良好
  • EVE API完全指南:函数对象与SIMD类型深度解析
  • USWDS与现代化框架集成终极指南:React、Angular和Vue的最佳实践
  • aHash高级特性:编译时/运行时RNG选择与no_std环境配置
  • 如何使用MagicClothing:AI服装驱动图像合成的完整指南
  • 自动驾驶数据集标注与检测对比:Streamlit Demo: The Udacity Self-driving Car Image Browser 实战教程
  • 彻底解决结构化数据痛点:TensorFlow Fold动态计算图实战指南