Postgresql - 条件SUM与相关子查询
问题描述:
我想计算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
答
你可以先做一个聚合。正如措词,您的查询似乎试图做到这一点:
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
谢谢你的帮助。我已经更新了查询,以更精确地查询我想要的内容,并用查询的当前行为描述了问题。即使你的解决方案,我也有同样的结果。我相信这是由于双重聚合,外部SUM()。有没有另外一种方法可以避免这种行为? –
@GiannisDim由于您无法通过编写查询来表达预期输出,因此您需要将数据样本和预期输出显示为数据。 –