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 和销售额时,又可以像普通数据表一样直接访问,对于使用者来说非常方便。