设为首页 加入收藏

TOP

集算器如何优化SQL计算(2)分组(二)
2015-11-21 01:29:15 来源: 作者: 【 】 浏览:1
Tags:如何 优化 SQL 计算 2)分组
多条记录作为汇总值参与进一步计算。

??????

A

?B

1

=db.query("select * from 股价表")

?

2

=A1.groups(股票;top(2,-交易日))

最后2个交易日的数据

3

=A2.new(股票,#2(1).收盘价-#2(2).收盘价:涨幅)

计算涨幅

聚合函数并不会先计算出分组子集,而是直接在已有结果上累积,这样可获得更高的性能,而且在数据量大到内存放不下时还可以基于游标工作。
?
如果数据已有序,则可以更高效地用位置取出相应记录:

???????

A

B?

1

=db.query("select * from 股价表 order by 交易日 desc")

?

2

=A1.groups(股票;top(2,0))

直接取前2条

3

=A2.new(股票,#2(1).收盘价-#2(2).收盘价:涨幅)

?

取出最大值对应记录、第1条最后1条等类似计算都是topN聚合的特例了。?
?
逆分组
?
与分组汇总相反,逆分组指将汇总数据拆分成多条明细数据。这种情况不多见,但碰到了用SQL很难处理,这里仅举一例。
?
分期付款表结构为:编号、总金额、起始日、总期数;要将每笔贷款拆分成多期记录,结构为:编号、期数、还款日、金额。总金额将简单地平均分配到每一期,一期为一个月。
?
从明细到汇总很容易,反过来就困难很多,用SQL将记录数变多一般是和一个序号表JOIN或用递归查询,思路都不直接。而用集算器则按常规思路写出来即可:

??

A

1

=db.query("select * from 分期付款表")

2

=A1.news(总期数;编号,~:期数,after@m(起始日,~-1):还款日,总金额/总期数:金额)


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇集算器如何优化SQL计算(1)动态列 下一篇如何将一个字符串中的所有非数字..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: