2017-07-17 109 views
1

我想计算CASE条件的SUM,其中一个条件使用相关子查询来查找结果,但我坚持使用语法。Postgresql - 条件SUM与相关子查询

这里是我创建到现在为止,但有错误的查询的一个示例:

更新

SELECT t1.account, 
     t1.date 
     SUM(CASE WHEN condition1 THEN t1.amount 
       WHEN condition2 THEN (select sum(t2.amount) from t2 where t2.account = t1.account and t2.date = t1.date) 
       ELSE 0 END) as total 
FROM t1 
GROUP BY t1.account, t1.date 

上述查询返回时,子查询的输出是多个记录错误的结果。简而言之,condition2的结果是sum(t2.amount)*(记录数)。

我试图从子查询中删除sum()函数,但因为它可以获取多个记录,我仍然有一个错误。

我相信它可以做某事,但我卡住了。

任何人都可以提出一些建议。

btw我正在使用Postgresql 9.4

回答

1

你可以先做一个聚合。正如措词,您的查询似乎试图做到这一点:

SELECT t1.account, 
     SUM(CASE WHEN condition1 THEN t1.amount 
       WHEN condition2 THEN t2.sumamount 
       ELSE 0 
      END) as total 
FROM t1 LEFT JOIN 
    (SELECT t2.account, SUM(t2.amount) as t2.sumamount 
     FROM t2 
     GROUP BY t2.account 
    ) t2 
    ON t2.account = t1.account 
GROUP BY t1.account 
+0

谢谢你的帮助。我已经更新了查询,以更精确地查询我想要的内容,并用查询的当前行为描述了问题。即使你的解决方案,我也有同样的结果。我相信这是由于双重聚合,外部SUM()。有没有另外一种方法可以避免这种行为? –

+1

@GiannisDim由于您无法通过编写查询来表达预期输出,因此您需要将数据样本和预期输出显示为数据。 –