聊聊MySQL的group by分组 #W02

本文探讨了MySQL中的group by分组操作,包括其概念、执行方式及索引的影响。通过分组,可以对数据进行聚合并去重。在MySQL执行分组时,可能会使用临时表和filesort,但若分组字段有索引,性能会得到提升。文章还对比了松散索引扫描和紧凑索引扫描的差异,并提到了distinct与分组的相似性和实现原理。
摘要由CSDN通过智能技术生成

最近接触了报表业务,里面有各种分组、求和操作。整理大脑中对分组的知识碎片,并查阅相关资料,在这里对group 做一个知识的梳理。

什么是分组?

假设有一张表articles, 有 id(主键)、author_id(作者)、type_id(类型)、created_at等字段。

select author_id, count(id) from articles group by author_id;

上面就是一个简单的分组操作,它会输出所有的author_id(不会重复)以及每个author_id拥有的文章数量。类似下面:

author_id  count

13455        10

13456        5

可以看出分组是一个聚合操作,按照group by 后面的字段进行聚合,然后可以对聚合后的集合进行分别操作,类似上面的求和。 执行的内容大概是: 先按照author_id 来进行聚合,表中有多少个唯一的author_id就分为多少个组, 不同的列如果author_id相同就归为同一组,不然则为另一组。然后可以对这些组执行一些操作:

select author_id, max(created_at) from articles group by author_id;

求出每个组(每个author)中最大的的创建时间。这样可以查询每个author最近一次发表文章是什么时候。

除了聚合之外,执行分组操作的字段在输出时值是唯一的,不会重复。所以分组大概可以达到三个结果:

  1. 按照某种
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值