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 |
