only_full_group_by是什么鬼

2016-08-12 09:25:00
hainuo
原创 2581
摘要:only_full_group_by是什么鬼
#起源昨天装了听云apm 插件,于是一晚上的报警不断,发现总是提示 mysql4200错误```["42000",1055,"Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx.x2_examhistory.ehusername' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"]. sql=[SELECT count(*) AS number,ehusername,max(ehscore) as ehscore FROM x?_examhistory WHERE ehstarttime >= :ehstarttime GROUP BY ehuserid ORDER BY number DESC LIMIT ??]```#查找原因度娘帮了忙,发现这样子的事情 `sql_mode` 中默认是 `only_full_group_by` 这是什么鬼通过 mysql 官方[13.20.3 MySQL Handling of GROUP BY](http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html) 这里可以详细的值,在使用了主键获取数据的情况下如果开启了 `only_full_group_by` (msyql 5.7 默认开启,5.6及之前不开启),那么如果 `select fields` 中的字段有计算就会被拒绝。主要原因如果使用了 id,且 id 为主键那么 你所用的 max(age) 中的 age 是由固定值的从而就出现这样的问题,max(age)和 age 是不匹配的 max(age)要求一个列表,而没有被提供。所以拒绝。#解决方式只需要将 sql_mode 中的值`only_full_group_by` 去掉即可。
发表评论
零 乘 贰 =
评论通过审核后显示。