mysql 的group by 满足的规则要求:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011066470/article/details/97291377
————————————————

GROUP BY满足的规则:

所有select 字段,除了聚合函数中的字段,都必须出现在GROUP BY 中。

例如:SELECT  name,age,max(salary) FROM  t_employee  GROUP BY  name,age

salary 字段可以不用出现在 GROUP BY 中

only_full_group_by的作用
ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式,这个表达式的值可能在经过group by操作后变成undefined。

而对于语义限制都比较严谨的多家数据库,如SQLServer、Oracle、PostgreSql都不支持select target list中出现语义不明确的列,这样的语句在这些数据库中是会被报错的,所以从MySQL 5.7版本开始修正了这个语义,就是我们所说的ONLY_FULL_GROUP_BY语义,例如查看MySQL 5.7默认的sql_mode如下:

mysql> select @@global.sql_mode;

原文地址:https://www.cnblogs.com/kukai/p/11444046.html