【发布时间】:2020-09-02 07:15:28
【问题描述】:
我正在使用 postgresql,需要编写一个查询来对来自两个不同表的不同列的值求和,然后如果是正数或负数,则将它们分成单独的列。
例如,
下面是源表
下面是需要创建的结果表,在填充时也要使用它
我在下面编写了查询以汇总总和并能够填充 TOT_CREDIT 和 TOT_DEBIT 列。是否有任何优化的查询来实现这一点?
select t.account_id,
t.transaction_date,
SUM(t.transaction_amt) filter (where t.transaction_amt >= 0) as tot_debit,
SUM(t.transaction_amt) filter (where t.transaction_amt < 0) as tot_credit,
case
when
(
SUM(t.transaction_amt) +
SUM(COALESCE(b.credit_balance,0)) +
SUM(COALESCE(b.debit_balance,0))
) < 0
then
(
SUM(t.transaction_amt) +
SUM(COALESCE(b.credit_balance,0)) +
SUM(COALESCE(b.debit_balance,0))
)
end as credit_balance,
case
when
(
SUM(t.transaction_amt) +
SUM(COALESCE(b.credit_balance,0)) +
SUM(COALESCE(b.debit_balance,0))
) > 0
then
(
SUM(t.transaction_amt) +
SUM(COALESCE(b.credit_balance,0)) +
SUM(COALESCE(b.debit_balance,0))
)
end as debit_balance,
from
transaction t
LEFT OUTER JOIN balance b ON (t.account_id = b.account_id
and t.transaction_date = b.transaction_date
and b.transaction_date=t.transaction_date- INTERVAL '1 DAYS')
group by
t.account_id,
t.transaction_date
请指点一下。
编辑 1:此查询未按预期方式工作。
【问题讨论】:
标签: sql postgresql aggregate-functions