5.3 分组迭代

 

5.2 提前终止的迭代运算


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 没有提供类似的方法。


6.1 定位运算
SPL SQL Python 代码示例对比