Redshift SQL 仅当找到第 1 组时才从两个组中求和金额

Redshift SQL sumup amount from two groups only when group 1 is found

我有一个要求,只有当第一组存在时我才必须从两个组中添加金额。

到目前为止,我已经选择了不同的组和相应的 ID。但我不确定如何进行下一步。

样本选择源数据:

Id   type  field1    field2    amount
1234 type1 testdata1 testdata2 123.5
1234 type2 testdata1 testdata2 123.5
1234 type3 testdata3 testdata4 123.5
5123 type2 testdata1 testdata2 147.96
3425 type3 testdata1 testdata2 123.5
5678 type1 testdata1 testdata2 123.5
5678 type4 testdata1 testdata2 123.5
5678 type6 testdata1 testdata2 123.5
5678 type7 testdata1 testdata2 123.5
8790 type1 testdata1 testdata2 123.5

现在我需要生成如下所示的 table:

id, field1, field2, sum(amount) if (type = type1 and amount <> 0) or (type = type2 and amount <> 0), 这应该只在类型 1 存在时完成否则没有已创建记录。

即要生成的示例数据

Id   field1    field2    sum(amount)
1234 testdata1 testdata2 247.00
5678 testdata1 testdata2 123.5
8790 testdata1 testdata2 123.5

即使类型 1 不存在,我编写的代码(在下面提供)也会生成 sum(amount) 或 amount,请帮忙。

Id   field1    field2    sum(amount)
1234 testdata1 testdata2 247.00
5123 testdata1 testdata2 147.96
5678 testdata1 testdata2 123.5
8790 testdata1 testdata2 123.5

提前致谢...

这听起来像是带过滤的条件聚合:

select id, field1, field2,
       sum(case when type in ('type1', 'type2') then amount else 0 end) as amount
from t
group by id, field1, field2
having sum( (type = 'type1')::int ) > 0;

这是 type1 和 type2 值的总和。 having 子句确保至少有一行带有 'type1'.