最近接触了报表业务,里面有各种分组、求和操作。整理大脑中对分组的知识碎片,并查阅相关资料,在这里对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最近一次发表文章是什么时候。
除了聚合之外,执行分组操作的字段在输出时值是唯一的,不会重复。所以分组大概可以达到三个结果:
- 按照某种