仅当找到第 1 组时,来自两个组的 Redshift SQL 汇总量

Posted

技术标签:

【中文标题】仅当找到第 1 组时,来自两个组的 Redshift SQL 汇总量【英文标题】:Redshift SQL sumup amount from two groups only when group 1 is found 【发布时间】:2021-05-24 17:06:45 【问题描述】:

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

到目前为止,我已经选择了不同的组和相应的 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

现在我需要生成如下表:

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

提前谢谢...

【问题讨论】:

【参考方案1】:

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

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'

【讨论】:

以上是关于仅当找到第 1 组时,来自两个组的 Redshift SQL 汇总量的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 中的分组限制:显示每个组的前 N ​​行,但仅当这些行中的第一行等于特定数据时

为什么在取消引用非元组时,对取消引用的引用元组的匹配不起作用?

在Crystal Report中通过不同的组移动字段

CakePHP 保存两个模型,第二个基于第一个

Tablix:添加新子列组时的空白单元格

在递归二叉树函数中返回元组时遇到问题