6.1 基本概念

SQL

SELECT ShipVia,sum(Quantity) Quantity
FROM Orders2021
GROUP BY ShipVia
ORDER BY ShipVia

SELECT ProductID, sum(Amount) Amount
FROM Orders2021
GROUP BY ProductID
ORDER BY ProductID

SELECT EmployeeID,EmployeeName,sum(Amount) Amount
FROM Orders2021
GROUP BY EmployeeID,EmployeeName
ORDER BY EmployeeID,EmployeeName

SPL

本例需要针对相同的数据计算多种分组汇总,如果我们能够只遍历一次就完成多次计算,就可以减少外存访问量来提速。
大数据的分组汇总通常使用游标实现,在用游标遍历时,将读出的每一段数据分组汇总后累积到结果集上。有多种分组,也只要分别分组汇总后累积到各自的结果集上即可。这样,只要遍历一次,就可以得到多种分组结果了。

解法一:

A B
1 =file(“Orders2021_Account.ctx”).open().cursor(ShipVia,ProductID,EmployeeID,EmployeeName, Quantity, Amount)
2 cursor A1 =A2.groups(ShipVia;sum(Quantity):Quantity)
3 cursor =A3.groups(EmployeeID;EmployeeName,sum(Amount):Amount)
4 cursor =A4.groups(ProductID; sum(Amount):Amount)

A2 用 cursor 关键字定义游标 A1 同步的管道。B2 在管道 A2 设置了第 1 种方式的分组汇总
A3-A4 定义了两个管道
B3 在管道 A3 设置了第 2 种方式的分组汇总
B4 在管道 A4 设置了第 3 种方式的分组汇总。

解法二:

A
1 =file(“Orders2021_Account.ctx”).open().cursor(ShipVia,ProductID,EmployeeID,EmployeeName, Quantity, Amount)
2 >ch1=channel(A1).groups(ShipVia;sum(Quantity):Quantity)
3 >ch2=channel(A1).groups(EmployeeID;EmployeeName, sum(Amount):Amount)
4 =A1.groups(ProductID; sum(Amount):Amount)
5 =ch1.result()
6 =ch2.result()

A2-A3 定义管道,及管道上的分组汇总
A4 对游标执行分组计算。
A5-A6 获得管道的运算结果

以上两种解法取其一即可,没有本质上的区别。如果有大分组结果集,必须返回游标,无法把结果集放到内存的情况,则只能采用 channel 的写法,把大分组结果集的计算放到游标上,其它小结果集计算放到管道上。

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾