繁体   English   中英

如何为剩余总数编写Oracle SQL查询

[英]How to write oracle sql query for remaining totals

我有以下查询返回的数据集,下面显示了一些行,但是返回的实际数据超过500k行。

Date         | amount
01-01-2010   | 200
01-02-2010   | 50
01-03-2010   | 400
01-04-2010   | 50
01-05-2010   | 0
01-06-2010   | 0
01-07-2010   | 100

我想查询返回“ 剩余金额”列,如下所示:

Date         | amount   | Remaining
01-01-2010   | 200      | 600
01-02-2010   | 50       | 550
01-03-2010   | 400      | 150
01-04-2010   | 50       | 100
01-05-2010   | 0        | 100
01-06-2010   | 0        | 100
01-07-2010   | 100      | 0

剩余金额以总金额的总和开头,该总金额是所有记录金额列的总和。

您还可以使用Windowing子句来避免SUM(AMOUNT) - (...)

SELECT dt, AMOUNT,
   nvl(sum(amount) over 
      (order by dt desc rows between unbounded preceding and 1 preceding)
   , 0) as REMAINING
FROM yourtable
order by dt

使用分析功能应该比相关子查询提供更好的性能,因为表只被扫描了一次。

以下是使用一个相关子查询的一种方法coalesce

select y.dt,
  y.amount,
  coalesce((select sum(amount)
   from yourtable y2
   where y2.dt > y.dt),0) as remaining
from yourtable y
order by y.dt

您可以使用oracle分析函数

SELECT DATE,
   AMOUNT,
   (SUM (AMOUNT) OVER ()) - (SUM (AMOUNT) OVER (ORDER BY DATE))
      AS REMAINING
FROM TABLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM