6.6 对齐分组:不匹配记录放到新组
按基准表中指定字段的顺序,将数据分组,不匹配的记录放到新组。适用于不仅关心匹配的成员信息,还要关心其他不匹配记录的场景。
根据员工表,统计 [California, Texas, New York, Florida] 的平均工资,其他州作为“Other”组进行统计。员工表部分数据如下:
ID | NAME | STATE | DEPT | SALARY |
---|---|---|---|---|
1 | Rebecca | California | R&D | 7000 |
2 | Ashley | New York | Finance | 11000 |
3 | Rachel | New Mexico | Sales | 9000 |
4 | Emily | Texas | HR | 7000 |
5 | Ashley | Texas | R&D | 16000 |
… | … | … | … | … |
在 SPL 中函数 A.align() 的选项 @n,用于在对齐分组时将不匹配记录放到新组。
脚本:
A | |
---|---|
1 | =T(“Employee.csv”) |
2 | [California,Texas,New York,Florida] |
3 | =A1.align@an(A2,STATE) |
4 | =A3.new(if (#>A2.len(),“Other”,STATE):STATE,~.avg(SALARY):AvgSalary) |
A1:查询员工表。
A2:创建地区序列。
A3:使用函数 A.align@an() 将员工表按地区对位分组,选项 @a 每组返回所有匹配成员,选项 @n 不匹配成员存放到新组。
A4:统计每组的平均工资,将不匹配的分组(最后一组)命名为“Other”。
运行结果:
STATE | AvgSalary |
---|---|
California | 7700.0 |
Texas | 7592.59 |
New York | 7677.77 |
Florida | 7145.16 |
Other | 7308.1 |