报错信息

 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 
翻译过来就是在group by 的地方有一些列是没有包括进去的
具体问题具体分析,我这里的问题是:select 的时候使用了TIMESTAMPDIFF 中的两个列名并没有包括在group by 中 
mysql 5.7以后的版本数据库的默认模式设置成了  only_full_group_by模式,而在执行的sql里有一些重复的行group by 的时候mysql 不知道选择哪一个行

错误实例

1:

SELECT
ifnull( sum( checkTime ) / count( 1 ), 0 ) AS time
FROM
( SELECT TIMESTAMPDIFF( MINUTE, CreateTime, EndTime ) AS checkTime FROM statistics_report WHERE AND ReportStatus = 2 GROUP BY reportid ) a

2:

SELECT
ifnull( sum( treatmentTime ) / count( 1 ), 0 ) AS time
FROM
(
SELECT
TIMESTAMPDIFF( MINUTE, min( CreateTime ), max( EndTime ) ) AS treatmentTime
FROM
statistics_report
WHERE
CreateTime > ? SartTime
AND CreateTime < ? EndTime
AND IsReportOperate = 2
AND createtime <> endtime
GROUP BY
reportid
) a

解决方案:

1:使用any_value() 包括具体提示的列名,使mysql 不再纠结与具体哪一个列

2: 把sql_mode 改成非only_full_group_by模式(如果是刚开发项目,且 ,对于项目有深入了解后 ,进行可行性分析后 再改,一般不建议,)

3:把sql 优化 ,对于每一个分组的元素 清晰的告知mysql 需要怎么选择


成功的写法:

1:
SELECT
ifnull( sum( checkTime ) / count( 1 ), 0 ) AS time
FROM
( SELECT TIMESTAMPDIFF( MINUTE, CreateTime, EndTime ) AS checkTime, reportid FROM statistics_report WHERE ReportStatus = 2 ) a
GROUP BY
reportid
-- 这里只是将group by 移动到了括号外面,在括号内不分组,在括号外进行分组,checkTime用sum函数来取值,解决问题。

2:

SELECT
ifnull( sum( timestampdiff( MINUTE, starttime, endtime ) ) / count( 1 ), 0 ) AS time
FROM
(
SELECT
min( createtime ) starttime,
max( endtime ) endtime,
reportid
FROM
statistics_report
WHERE
CreateTime > ? SartTime
AND CreateTime < ? EndTime
AND IsReportOperate = 2
AND createtime <> endtime
GROUP BY
reportid
) a
-- 这里是将timestampdiff 于min max 分开,在进行取最大最小值的时候group by ;在timestampdiff 的時候 不需要分組 ,因为这时候reportid 没有重复的。
-- 另外这里加了ifnull 是为了取到数据的时候避免null


结束分析:

group by 的问题 很奇怪的点在于 5.7 的mysql 版本改版;bug出现具有偶发性;在mysql client执行不抱错,而在程序中执行会报错;

这是哪个问题导致了问题的复杂性,在了解问题原理后 从根本上解决是最直接的方案。

时常问问自己:是不是太菜。

mysql group by 报错 ,only_full_group_by 三种解决方案的更多相关文章

  1. mysql group by 报错异常解决

    mysql报错及其解决方式 1.在使用group by 查询一张表的数据的时候:select date,time,max(delaytime) as delaytime,sum(delaynum) a ...

  2. Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案

    Wed Jun 27 2018 09:25:43 GMT+0800 (中国标准时间) Page 注册错误,Please do not register multiple Pages in undefi ...

  3. mysql执行update报错 Err] 1055 - 'information_schema.PROFILING.SEQ' isn't in GROUP BY

    mysql执行update报错 Err] 1055 - 'information_schema.PROFILING.SEQ' isn't in GROUP BY 今天开发的同事发来如下错误信息,最最简 ...

  4. mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no

    ----mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no------ 解决方案: sel ...

  5. zTree实现地市县三级级联报错(三)

    zTree实现地市县三级级联报错(三) 1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] ...

  6. MySQL 5.6 以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。

    Field 'id' doesn't have a default value问题解决方法 运维的名义关注0人评论3323人阅读2018-01-23 17:37:42   MySQL 5.0 以上版本 ...

  7. Linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) "

    前言 作者在2021-07-21时遇到 linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localh ...

  8. CentOS命令登录MySQL时,报错ERROR 1045 (28000):

    CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解 ...

  9. mysql执行update报错1175解决方法

    mysql执行update报错 update library set status=true where 1=1 Error Code: 1175. You are using safe update ...

随机推荐

  1. 1+X证书学习日志——定位

    ## 静态定位:                 position:static;    默认值,指定left/right/top/bottom/  没有作用.                 pos ...

  2. 6.transform?animation?区别?animation-duration【CSS】

    1.Transform:它和width.left一样,定义了元素很多静态样式实现变形.旋转.缩放.移位及透视等功能,通过一系列功能的组合我们可以实现很炫酷的静态效果(非动画).  2.Animatio ...

  3. 行内块inline-block元素之间出现空白间隙原因及解决办法

    首先,来看下具体的问题,下面是用inline-block布局实现的两边固定宽度,中间自适应的html代码: 1 2 3 4 5 6 7 8 9 <section class="layo ...

  4. Linux 内核/驱动开发总结

    总体来看,需要一个阶段性总结了,因为现在SD卡的调试也进入了卡壳期.大概会出一系列的总结文章,主要涉及的主题在下面列出: 1.开发工具:gcc/gdb/vim/ctags 2.Makefile和KCo ...

  5. Map转url ,url转Map工具类

    /** * 将url参数转换成map * @param param aa=11&bb=22&cc=33 * @return */ public static Map<String ...

  6. 小程序 wx.getSystemInfoSync 获取 windowHeight 不准确的问题

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. wx.getSystemInfo(OBJECT) 获取系统信息. OBJECT参数说明: 参数 ...

  7. c# Regex类

  8. Needham-Schroeder Scyther工具形式化过程

    1.Needham-Schroeder Public key Protocol 协议的通信认证的过程 顺序图的 1.  A-> S :   A,  B 2. S->A:     {Ks, ...

  9. requests-html模块(下)

    render方法 我们先理一下关系requests和的作者是同一个人,pyppeteer是nodejs中puppeteer的非官方实现 requests-html调用的pyppeteer与浏览器进行交 ...

  10. IDEA实用教程(十一)—— 使用Maven创建JavaSE项目

    第一步 第二步 在IDEA中,我们常用三种骨架 org.apache.maven.archetypes:maven-archetype-quickstart : 打包方式为jar org.apache ...