【问题标题】:add previous value to current value within in same group将前一个值添加到同一组中的当前值
【发布时间】:2017-07-21 14:40:53
【问题描述】:

我有一张像下面这样的表格

id depid sal
1   1    100
2   1    200
3   2    300
4   2    400 

我希望我的输出如下表所示。 在输出中发生的事情是,Sal 值通过添加相同 deptid 的先前值来增加。

id depid sal
1   1    100
2   1    300
3   2    300
4   2    700 

任何想法我怎样才能做到这一点......?我正在使用 oracle 数据库。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    分析函数。

    select id, depid, sum(sal) over( partition by depid order by id) sal from test;
    

    sum 函数以解析方式将所有行从开始到当前行求和,这是默认行为

    扩展版本。

    select id, depid, sum(sal) over( partition by depid order by id range unbounded preceding) sal from test;
    

    最后一个选项。

    select id, depid, sum(sal) over( partition by depid order by id range between unbounded preceding and current row) sal from test;
    

    这些示例中的每一个都完全相同。我添加它是为了向您展示它是如何工作的。

    更多信息请查看文档Analitic function

    *在评论后添加。

    select id, depid, sum(sal) over( partition by depid order by id rows 1 preceding) sal from test;
    
    select id, depid, sum(sal) over( partition by depid order by id rows between 1 preceding and current row) sal from test;
    

    【讨论】:

    • 第一个查询是给出一个部门内所有薪水的总和,但是如果你看到预期的输出,其中萨尔与同一个部门内的最后一个萨尔相加..!!其次,您的第二个和第三个查询不起作用...!对不起?
    • 所有查询都应该有效。我已经在 Oracle 11.2 上对其进行了测试。我又添加了两个示例来汇总当前行和前一行的 sal。
    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多