5.3 分组迭代
1. 计算各销售员的累积销售额
2. 为每个销售员的订单从 1 开始编号,并将 ORDERID 替换为该编号
SPL
A | B | |
---|---|---|
1 | =file(“SALES.csv”).import@tc() | |
2 | =A1.sort(SELLERID,ORDERDATE) | / 排序 |
3 | =A2.(iterate(~~+AMOUNT,0;SELLERID)) | / 累积销售额 |
4 | =A2.derive(iterate(~~+AMOUNT,0;SELLERID):CUM_AMOUNT) | / 累积销售额 |
5 | =A2.derive(cum(AMOUNT;SELLERID):CUM_AMOUNT) | / 累积销售额 |
6 | =A2.(iterate(~~+#,0;SELLERID)) | / 销售员订单编号 |
7 | =A2.run(ORDERID=iterate(~~+#,0;SELLERID)) | / 销售员订单编号 |
8 | =A2.run(ORDERID=seq(SELLERID)) | / 销售员订单编号 |
A3 是用 iterate(x,a;G) 来算累积销售额,其中 G 是字段名,即当 G 发生变化时,记录下当前的 ~~ 并重新开始迭代,相当于 A2.group@o(SELLERID).conj(~.(iterate(~~+AMOUNT,0)))。
A4 将 iterate() 的结果作为 A2 新的一列。
A5 是 cum(x;G) 来算累积销售额,即当 G 发生变化时,重新开始计算,结果和 A4 相同。
A6 是 iterate() 按 SELLERID 从 1 开始编号,当 SELLERID 改变时编号重新从 1 开始。
A7 是把 A2 的 ORDERID 改为 A6 的值。
A8 中的 seq()方法和 A6 中 iterate() 作用相同,结果和 A7 一样。
SQL
SQL 没有提供类似的方法。
Python
Python 没有提供类似的方法。