SQL之Running Total

Running Total是什么意思呢?


假设我们有一张表:TRANS,表明我们有的交易记录,其中有一个column是id,另一个是money(表示该笔交易设计的金额),我们的需求就是如何计算每笔交易以后累积的交易总数。例子如下:


idmoney
110
2 20
315
45
550

如果算每次累积的,就依次是10,30,45,50,100。


一种方式:(这种方式效率比较低O(n*n),n是表大小)

SELECT T1.ID, T1.MONEY, SUM(T2.MONEY) RUNNING_TOTAL FROM TRANS T1,TRANS T2
WHERE T1.ID >= T2.ID 
GROUP BY T1.ID, T1.MONEY
ORDER BY T1.ID ASC


ORACLE下,也可以使用OVER:

SELECT ID, SUM(MONEY) OVER (ORDER BY ID) RUNNINGT_TOTAL FROM TRANS


还有一种方式,就是使用Materialized View,这种方式其实就是暂时存储了query的执行结果,然后通过一定的机制进行refresh。

https://docs.oracle.com/cd/B10501_01/server.920/a96567/repmview.htm


参考资料:

http://www.1keydata.com/sql/sql-running-totals.html

http://www.dba-oracle.com/t_over_analytic_function.htm

http://www.1keydata.com/sql/advanced.html

http://blog.jooq.org/2013/11/03/probably-the-coolest-sql-feature-window-functions/

http://tapoueh.org/blog/2013/08/20-Window-Functions


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值