情景再现
今天写sql时,遇到一个有趣的现象,如下图
group by时,只指定了name字段,而没有age字段,这在oracle中肯定是错误的,但是mysql却可以正常运行,并且有结果。
group by的原理
不过,通过这个测试,我们也能大体知道group by的原理,用name字段分组,筛选数据,遇到第一条name=ade,分组中没有,添加ade,筛选第二条,name是ade,分组中已经有ade了,所以忽略掉。
group by不严格
虽然有结果,但是这样的group by是不严格的,通过查资料得知,可以设置sql_mode,当前的sql_mode是
要想严格group by,必须包含only_full_group_by
设置严格group by后,我们再查询,你会发现查询的字段中如果不包含age,会报错。
参考资料
group by的原理
不过,通过这个测试,我们也能大体知道group by的原理,用name字段分组,筛选数据,遇到第一条name=ade,分组中没有,添加ade,筛选第二条,name是ade,分组中已经有ade了,所以忽略掉。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/3756.html