【摘要】
在分组时经常会要求结果集必须按基准集合的次序出现,这种对齐分组在日常统计中是很常见的。我们还能把对齐分组推广成更一般的枚举分组。如何简便快捷的处理对齐分组,这里为你全程解析,并提供 esProc 示例代码。按指定基准对齐的分组运算
对照一个基准集合,将待分组集合成员的某个字段或表达式与基准集合成员比较,相同者则分到同一个组中,最后拆分出来的组数和基准集合成员数是相同的。这种分组我们称为对齐分组。对齐分组可能会有空组,也可能有成员未分配到任何一个组中。
1. 普通对齐分组
1.1 每组保留最多一个匹配成员
按某字段的指定顺序,将表中所有记录分组并汇总求和。
【例 1】 根据相互关联的课程表和选课表,按课程表顺序查询有哪些课程无人选择:
【SPL 脚本】
A5的执行结果如下:
1.2 每组保留所有匹配成员
按某字段的指定顺序,将表中所有记录分组并汇总求和。
【例 2】 根据相互关联的员工表和部门表,按部门表中的部门顺序统计各部门人数:
【SPL 脚本】
A5的执行结果如下:
1.3 不匹配记录放到新组
按某字段的指定顺序,将表中所有记录分组,不匹配记录放到新组。
【例 3】 根据员工薪资表,统计 [California, Texas, New York, Florida] 的平均工资,未指定的州作为“Other”统计。员工薪资表部分数据如下:
【SPL 脚本】
A5的执行结果如下:
2. 序号对齐分组
序号对齐分组,是指按照指定的序号进行分组,序号相同的成员分到同一组。
2.1 每组保留最多一个匹配成员
在相互关联的两个表中,查找未被引用的记录。
【例 4】 根据相互关联的销售表和客户表,顺序列出 2014 年没有销售记录的客户:
【SPL 脚本】
A6的执行结果如下:
2.2 每组保留所有匹配成员
按序号将表中所有记录分组并汇总求和。
【例 5】 根据订单表,顺序列出 2013 年每月的订单总数。订单表部分数据如下:
【SPL 脚本】
A4的执行结果如下:
2.3 按序号重复性分组
按计算出的序号数列重复性分组并计算。
【例 6】 根据发帖记录表,按标签将帖子分组,并统计各个标签出现频数。发帖记录表部分数据如下:
【SPL 脚本】
A5的执行结果如下:
2.4 分段分组
根据指定字段的值,分段分组并汇总计数。
【例 7】 根据员工薪资表,按工资 8000 以下、8000~12000 和 12000 以上分组,并统计各组的人数。员工薪资表部分数据如下:
【SPL 脚本】
A5的执行结果如下:
根据表达式的计算结果,将记录分段分组并汇总计算平均值。
【例 8】根据员工表,按入职时间 10 年以下,10~20 年和 20 年以上分组,并统计每组的平均工资。员工表部分数据如下:
【SPL 脚本】
A6的执行结果如下:
3. 枚举分组
枚举分组是指,事先指定一组枚举条件,将待分组集合的成员作为参数计算这批条件,条件成立者都被划分到与该条件对应的一个子集中,结果集的子集和事先指定的条件一一对应。
3.1 每个成员只存放到第一个匹配组
根据枚举条件表达式,将记录分组,分组时记录只置于第一个匹配组。
【例 9】 根据中国主要城市人口表,按人口将城市分类。中国主要城市人口表部分数据如下:
【SPL 脚本】
A4的执行结果如下:
3.2 不匹配成员存放到新组
根据枚举条件表达式,将记录分组,不匹配记录放到新组。
【例 10】 根据员工薪资表,按年龄条件 [小于 35 岁, 小于 45 岁] 将员工分组,统计平均工资,不满足条件的分到新组。员工薪资表部分数据如下:
【SPL 脚本】
A5的执行结果如下:
3.3 按照枚举条件可重复分组
根据不同的指定序列,将记录分组并计算,分组时记录可重复。
【例 11】 根据城市 GDP 表,分别统计直辖市、一线城市、二线城市的人均 GDP,分组时可能重复。城市 GDP 表部分数据如下:
【SPL 脚本】
A5的执行结果如下:
《SPL CookBook》中还有更多相关计算示例。
来源:oschina
链接:https://my.oschina.net/u/3949403/blog/4705150