Postgresql - 带相关子查询的条件SUM

时间:2017-07-17 23:57:27

标签: sql postgresql

我想计算一个CASE条件的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()函数,但由于它可以获取多个记录,我仍然会收到错误。

我相信它可以以某种方式完成,但我被卡住了。

任何人都可以提出建议。

顺便说一句,我正在使用Postgresql 9.4

1 个答案:

答案 0 :(得分: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