3.1 两个集合的合集
集合 A 和 B 的合集是由所有属于集合 A 或属于集合 B 的成员所组成的集合,包括重复成员。比如集合 [1,2] 与[1,3]的合集,是集合[1,2,1,3],重复成员 1 在合集中出现了 2 次。
某商家有网店和实体店铺两种销售渠道,其销售数据分别存储在 SALES_ONLINE 和 SALES_STORE 两个表中。现在要查询 2014 年每种产品的总销售额。部分数据如下:
SALES_ONLINE:
ID | CUSTOMERID | ORDERDATE | PRODUCTID | AMOUNT |
---|---|---|---|---|
1 | HANAR | 2014/01/01 | 17 | 3868.6 |
2 | ERNSH | 2014/01/03 | 42 | 1005.9 |
3 | LINOD | 2014/01/06 | 64 | 400.0 |
4 | OTTIK | 2014/01/07 | 10 | 1194.0 |
5 | OCEAN | 2014/01/09 | 41 | 319.2 |
… | … | … | … | … |
SALES_STORE:
ID | CUSTOMERID | ORDERDATE | SELLERID | PRODUCTID | AMOUNT |
---|---|---|---|---|---|
1 | EASTC | 2014/01/01 | 1 | 27 | 3063.0 |
2 | ERNSH | 2014/01/02 | 8 | 70 | 2713.5 |
3 | MAGAA | 2014/01/03 | 2 | 74 | 1675.0 |
4 | SAVEA | 2014/01/07 | 7 | 45 | 2018.2 |
5 | FOLIG | 2014/01/08 | 8 | 30 | 1622.4 |
… | … | … | … | … | … |
两个表的数据结构并不完全相同,比如 SALES_STORE 有字段 SELLERID 用于存储销售人员,但是都有相同的订单日期、产品 ID、销售额等字段,所以并不影响合集后的分组聚合。
SPL 中可以使用符号 "|" 来计算集合的合集。比如 A|B 就是集合 A 与集合 B 的合集。
脚本:
A | |
---|---|
1 | =T(“SalesOnline.xlsx”).select(year(ORDERDATE)==2014) |
2 | =T(“SalesStore.xlsx”).select(year(ORDERDATE)==2014) |
3 | =A1|A2 |
4 | =A3.groups(PRODUCTID; sum(AMOUNT):AMOUNT) |
A1:从文件中导入线上销售表,并选出 2014 年的销售记录。
A2:从文件中导入实体店销售表,并选出 2014 年的销售记录。
A3:使用符号 "|" 计算两个集合的合集。
A4:分组汇总每种商品的总销售额。
值得注意的是,SPL 计算合集时并不要求集合有相同的数据结构,这是因为 SPL 的序列支持异构的成员。当我们想访问序列成员的共有字段产品 ID 和销售额时,又可以像普通数据表一样直接访问,对于使用者来说非常方便。