5.1 简单迭代运算

 

4.4 分组聚合


1. 用迭代函数实现求和 (sum)、累计求和(cum)、最大值(max)、最小值成员(maxp) 计算

2. 计算 10 号销售员的累积销售额

3. 为 10 号销售员的订单从 1 开始编号,并将 ORDERID 替换为该编号

SPL

A B
1 [1,10,9,7,1,10,4,9,6,7]
2 =A1.iterate(~~+~,0) / 求和
3 =A1.iterate@a(~~+~,0) / 累计求和
4 =A1.iterate(if(~~<~,~,~~),-inf()) / 最大值
5 =A1.new(#:idx,~:value)
6 =A5.iterate(if (~~==null || ~.value<~~.value,~,~~), null ) / 最小成员
7 =A5.iterate(if(~~==null || ~.value<~~.value,~,if(~.value==~~.value,~~|~,~~)), null ) / 最小成员集合
8 =file(“SALES.csv”).import@tc()
9 =A8.select(SELLERID==10)
10 =A9.derive(iterate(~~+AMOUNT,0):CUM_AMOUNT) / 累积销售额
11 =A9.derive(cum(AMOUNT):CUM_AMOUNT) / 累积销售额
12 =A10.run(ORDERID=iterate(~~+1,0)) / 销售员订单编号
13 =A10.run(ORDERID=seq(SELLERID)) / 销售员订单编号

迭代函数 A.iterate(x,a),将针对 A 的每个成员计算 x,在 x 中可以使用 ~ 和 #表示循环中的 A 的当前成员和序号,需要特别说明的是,迭代函数还提供了符号 ~~,用于表示上一轮循环中计算出的 x,开始循环时,~~ 的初始值是参数 a。所有成员循环后,返回最后的结果。

增加 @a 选项后,所有成员都循环后,返回每一轮计算出来的 ~~ 构成的序列,其长度和 A 相同。

A10 是迭代产生,产生 10 号销售员的累积销售额,和 A11 的结果相同。

A12 是迭代执行,效果和 A13 相同。

SQL

SQL 没有提供类似的方法。

Python

Python 没有提供类似的方法。


5.2 提前终止的迭代运算
SPL SQL Python 代码示例对比