我想计算一个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
答案 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