当前位置:网站首页>按指定基准对齐的分组运算

按指定基准对齐的分组运算

2020-11-06 01:16:04 raqsoft

【摘要】
    在分组时经常会要求结果集必须按基准集合的次序出现,这种对齐分组在日常统计中是很常见的。我们还能把对齐分组推广成更一般的枚举分组。如何简便快捷的处理对齐分组,这里为你全程解析,并提供 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》中还有更多相关计算示例。

版权声明
本文为[raqsoft]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000037740879