6.4 对齐分组:每组最多保留一条记录
在分组时经常会要求结果集必须按基准集合的次序出现,这种对齐分组在日常统计中是很常见的。比如按北上广深的顺序,统计某公司在这些城市的总销售额;按指定的部门顺序,查询各部门的平均工资等等。
这种分组我们称为对齐分组。对齐分组可能会有空组,也可能有成员未分配到任何一个组中。
按基准表中指定字段的顺序,将数据排序,每组保留最多一个匹配成员。适用于我们希望按照指定顺序查看或者使用数据的情况。
根据某年的中国城市 GDP 表,按照北上广深的顺序查询这些一线城市的 GDP 和人口。部分数据如下:
ID | CITY | GDP | POPULATION |
---|---|---|---|
1 | Shanghai | 32679 | 2418 |
2 | Beijing | 30320 | 2171 |
3 | Shenzhen | 24691 | 1253 |
4 | Guangzhou | 23000 | 1450 |
5 | Chongqing | 20363 | 3372 |
… | … | … | … |
在 SPL 中函数 A.align() 用于对齐分组,默认每组保留最多一个匹配成员。
脚本:
A | |
---|---|
1 | =T(“CityGDP.txt”) |
2 | [“Beijing”,“Shanghai”,“Guangzhou”,“Shenzhen”] |
3 | =A1.align(A2,CITY) |
4 | =A3.new(CITY,GDP,POPULATION) |
A1:查询城市 GDP 表。
A2:定义城市序列。
A3:使用函数 A.align(),将城市 GDP 表按照指定的城市序列排序,每组保留最多一个匹配成员。
A4:创建以城市、GDP、人口为字段的结果表。
运行结果:
CITY | GDP | POPULATION |
---|---|---|
Beijing | 30320 | 2171 |
Shanghai | 32679 | 2418 |
Guangzhou | 23000 | 1450 |
Shenzhen | 24691 | 1253 |