mysql 严格group by

本文通过一个具体的例子展示了MySQL中GROUP BY操作的行为特点及其与Oracle的不同之处,并介绍了如何通过设置sql_mode来实现更严格的分组标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情景再现

今天写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,会报错。



参考资料

mysql sql_mode references

group by的原理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值