group by理解的进阶过程

本文深入探讨了数据库中GroupBy操作的分组机制,解释了单字段与多字段分组的区别,以及字段顺序对分组结果的影响。通过具体实例展示了如何正确理解和应用GroupBy,以实现数据的有效分组。

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

先上例子

表数据如图
表数据

1.group by后只跟一个字段

查询结果

2.跟2个字段

查询结果

3.调换位置

查询结果

理解

先说说之前的困惑。
“表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,知分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接道着第2个字段值相同的记录中,再根据第3个字段的值进行分组…依次类推。”
如上是之前刚接触group by的时候一直看到的解释。当时不理解为什么老是说先按第一个字段分组,再按第二个字段分组。因为从直观结果来看就是group by后面的字段全部一样时,才会分到一个组里面,没有什么先后之分,结果都是一样的,后面的字段都要计入分组规则。
从1和2的结果我们可以看到确实是先把name进行了分组,从2的结果中id=8数据到了第二行,而不是最后一行,就可以得出这个结论了。我想上面一直说的先后顺序,指的是数据库在进行分组的实际运行流程,是通过这个流程来实现了最终group by后面的字段都计入分组规则的需求。
通过3来验证,可以看到,先把age分了组,然后再从age一样的组中分出name一样的组。
再者,通过这种方式实现的分组。有点类似于excel表格展示数据的方式一样的在一块儿,可以合并单元格。比如2里面第一列的3个a。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值