【问题标题】:Teradata. How to sum all values within a group?太数据。如何对组内的所有值求和?
【发布时间】:2016-10-29 17:14:59
【问题描述】:

我的初始表是这样的

id  value
1   20
1   50
1   30
2   60 
2   5
2   35

我需要以下结果表

id  value   cum         | ( this is explanation not a field) 
_ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _
1   20      20          | (0  + 20 = 20) 
1   30      50          | (30 + 20 = 50) 
1   50      100         | (50 + 50 = 100) 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _
2   5       5           | (0  + 5 = 5) 
2   35      40          | (5  + 35 = 40) 
2   60      100         | (40 + 60 = 100) 

逻辑是

1)ORDER原表BY value ASC

2) SUM 将所有先前的值加起来,形成一个累积的 cum 字段。所以 cum 列是所有 value 中的 SUM 小于当前的 value

我只需要在没有存储过程的情况下使用 sql 来执行此操作

我该怎么做?

【问题讨论】:

    标签: teradata


    【解决方案1】:

    嗯,你描述了一个累积和:

    sum(value) 
    over (partition by id 
          order by values
          rows unbounded preceding)
    

    在 Teradata 中需要 rows unbounded preceding,因为它默认为 rows unbounded preceding and unbounded followingGroup Sum),这与标准 SQL 的默认 range unbounded preceding 不同。

    【讨论】:

    • SEL "id", "value", SUM ( "value") OVER (PARTITION BY "id"ORDER BY "value") FROM myTab GROUP BY 1,2 这给了所有100
    • 抱歉,忘记rows unbounded preceding 部分,已修复。
    • 谢谢。我曾经使用with recursive 来做到这一点
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2017-03-06
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多