6.20 分组子集:关注子集而非聚合值
把集合中具有相同属性的成员分配到同一个组,这就是分组运算。比如员工表根据部门分组,每组的员工都具有相同的部门;销售表可以根据销售年份分组,每组都是同一个年份的销售记录等等。
分组运算的实质是将一个集合按照某种规则拆分成若干个子集,也就是说,返回值应当是一个由集合构成的集合。对于每个成员集合,我们称为分组子集。
通常人们对分组子集的聚合值更感兴趣,因此分组运算常常伴随着对子集的进一步汇总计算。但是,我们仍然有对这些分组子集而不是聚合值更感兴趣的时候。
我们以员工表为例,部分数据如下:
ID | NAME | BIRTHDAY | STATE | DEPT | SALARY |
---|---|---|---|---|---|
1 | Rebecca | 1974/11/20 | California | R&D | 7000 |
2 | Ashley | 1980/07/19 | New York | Finance | 11000 |
3 | Rachel | 1970/12/17 | New Mexico | Sales | 9000 |
4 | Emily | 1985/03/07 | Texas | HR | 7000 |
5 | Ashley | 1975/05/13 | Texas | R&D | 16000 |
… | … | … | … | … | … |
找出有相同出生日期的员工。
可以用函数 A.group() 来实现真正的分组,分组后的结果集是由多个分组子集组成的集合。
脚本:
A | |
---|---|
1 | =T(“Employee.csv”) |
2 | =A1.group(BIRTHDAY) |
3 | =A2.select(~.len()>1).conj() |
A1:导入员工表。
A2:使用了函数 A.group() 按出生日期分组。
A3:选择成员数量大于 1 的分组,即有相同出生日期的子集。再将这些子集合并。