mysql 严格group by详解数据库

情景再现

今天写sql时,遇到一个有趣的现象,如下图

group by时,只指定了name字段,而没有age字段,这在oracle中肯定是错误的,但是mysql却可以正常运行,并且有结果。

mysql 严格group by详解数据库

group by的原理

不过,通过这个测试,我们也能大体知道group by的原理,用name字段分组,筛选数据,遇到第一条name=ade,分组中没有,添加ade,筛选第二条,name是ade,分组中已经有ade了,所以忽略掉。

group by不严格

虽然有结果,但是这样的group by是不严格的,通过查资料得知,可以设置sql_mode,当前的sql_mode是

mysql 严格group by详解数据库

要想严格group by,必须包含only_full_group_by

mysql 严格group by详解数据库

设置严格group by后,我们再查询,你会发现查询的字段中如果不包含age,会报错。

mysql 严格group by详解数据库

参考资料

mysql sql_mode references

group by的原理

不过,通过这个测试,我们也能大体知道group by的原理,用name字段分组,筛选数据,遇到第一条name=ade,分组中没有,添加ade,筛选第二条,name是ade,分组中已经有ade了,所以忽略掉。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/database/3756.html

(0)
上一篇 2021年7月16日 18:26
下一篇 2021年7月16日 18:26

相关推荐

发表回复

登录后才能评论