【问题标题】:Sum distinct group values only仅对不同的组值求和
【发布时间】:2021-07-01 04:27:41
【问题描述】:

我想对每组不同的值求和。请原谅这篇冗长的帖子...

上下文。假设我有一个表格:

ID  Foo Value
A   1   2
B   0   2
C   0   3
A   1   2
A   1   2
C   0   3
B   0   2

每个 ID/Foo 组合都有不同的值。我想将此表加入另一个具有累积字段的 cte,例如假设在使用rows unbounded preceeding 加入后,我有一个名为累积的新字段。相同的数据,只是重复了 3 次,累积值:

ID  Foo Value   Cumulative
A   1   2   1
B   0   2   1
C   0   3   1
A   1   2   1
A   1   2   1
C   0   3   1
B   0   2   1
A   1   2   2
B   0   2   2
C   0   3   2
A   1   2   2
A   1   2   2
C   0   3   2
B   0   2   2
A   1   2   3
B   0   2   3
C   0   3   3
A   1   2   3
A   1   2   3
C   0   3   3
B   0   2   3

我想添加一个新字段“segment_value”,它为每个 foo 获取不同 ID 值的总和。例如。不同的 ID/Foo 组合是:

ID  Foo Value
A   1   2
B   0   2
C   0   3

因此,我想要一个新字段“segment_value”,它为 Foo=1 返回 2,为 Foo=0 返回 5。期望的结果:

ID  Foo Value   Cumulative  segment_value
A   1   2   1   2
B   0   2   1   5
C   0   3   1   5
A   1   2   1   2
A   1   2   1   2
C   0   3   1   5
B   0   2   1   5
A   1   2   2   2
B   0   2   2   5
C   0   3   2   5
A   1   2   2   2
A   1   2   2   2
C   0   3   2   5
B   0   2   2   5
A   1   2   3   2
B   0   2   3   5
C   0   3   3   5
A   1   2   3   2
A   1   2   3   2
C   0   3   3   5
B   0   2   3   5

我怎样才能做到这一点?

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    我认为你没有很好地解释你的问题,我可能误解了一些东西,但你不能使用这样的查询来提取segment_value

    select 
        foo, 
        sum(val) as segment_value
    from (
        select distinct foo, val from table
    ) tab
    group by foo 
    

    这将返回以下结果:

    foo segment_value
    1   2
    0   5
    

    然后您可以将其加入到其余的查询中,并根据您的需要使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多