【问题标题】:How to have decreasing running total in Oracle sql如何在 Oracle sql 中减少运行总数
【发布时间】:2018-04-01 11:26:06
【问题描述】:

我有一列包含以下值

Week    Value
0       83
1       0
2       1
3       4
4       0
5       9

我需要结果

Week    Value    Remaining
    0       83    83
    1       0     83
    2       1     82
    3       4     78
    4       0     78
    5       9     69

如何在 Oracle SQL 查询中执行此操作。我知道我可以在 PL/SQL 中实现这一点,但我想在选择查询中实现这一点。有人可以帮我吗?

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper cumulative-sum


    【解决方案1】:

    您可以使用累积总和来做到这一点:

    select t.*,
           (max(case when week = 0 then value end) over () -
            coalesce(sum(case when week > 0 then value end) over (order by week), 0)
           ) as remaining
    from t;
    

    我认为您不应该将第 0 周视为特殊情况。相反,使用正值和负值。然后你可以这样做:

    select t.*,
           sum(value) over (order by week) as remaining
    from t;
    

    【讨论】:

    • 不幸的是,这些值不是正数也不是负数。一周内的总和(值)会增加运行总数。
    • 我在上面的同一个查询中又添加了一个场景。对相同的解决方案有任何想法吗?
    • @bharath 。 . .你应该问一个新问题。
    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2014-04-05
    • 2015-06-02
    • 2022-01-10
    相关资源
    最近更新 更多