如何在 postgresQL 查询中实现数学表达式?
Posted
技术标签:
【中文标题】如何在 postgresQL 查询中实现数学表达式?【英文标题】:How to achieve mathematical expression in postgres SQL query? 【发布时间】:2018-07-12 15:38:31 【问题描述】:我有一种需求,从 PostgreSQL 数据库表中找出“主余额”。
在这里,逻辑同样非常简单,
主要余额 = 贷方 + 退款 - 借方
我也有一个数据库表,
表名:- Account
列:- id, source_account_number, destination_account_number, transaction_type, amount, creation_date_time
这里,transaction_type
可能有以下一组可能的值,CREDIT、REFUND、DEBIT。
现在,我想知道例如我的空调余额是多少,那么逻辑也应该是这样的,
主要余额 = 所有
CREDIT
条目的总和 + 所有REFUND
条目的总和 - 所有DEBIT
条目的总和。
所以基本上,我试图通过单个查询来实现这一点。
例如(我知道错了但还是让我画),
select sum(amount) from Account where destination_account_number = 'XYZ' and transaction_type in ('CREDIT', 'REFUND');
但它只会返回 存款 金额本身,DEBIT 呢。
显然我们也可以恢复这些,但它促进了多个查询。
谁能帮助我通过最简单、优化的方式来实现此功能?
对所有愿意表现出兴趣的人来说,任何帮助都会非常感激!
更新 -
在这里,transaction_type
可能有以下一组可能的值,CREDIT、REFUND、DEBIT、OTHERS、PENDING、EXPIRED。
现在,请考虑主余额逻辑:- CREDIT + REFUND - DEBIT where PENDING, EXPIRED 资金将在主余额计算中跳过。
【问题讨论】:
【参考方案1】:这可以通过条件聚合来完成。
select sum(case when transaction_type in ('CREDIT', 'REFUND') then amount else -amount end)
from Account
where destination_account_number = 'XYZ'
【讨论】:
能否请您谈谈借记交易。我的意思是我怎么能和你的回答一起处理? 能否请您查看我在页面最后底部的更新部分,让我知道如何处理这些状态。 好吧,我对以下查询很满意,选择 sum(case when transaction_type in ('CREDIT', 'REFUND') then amount when transaction_type in ('DEBIT') then - amount end) from destination_account_number = 'XYZ'的帐户以上是关于如何在 postgresQL 查询中实现数学表达式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Postgresql 中实现对复杂嵌套 JSONB 的全文搜索
如何在流式查询中使用外部数据库(postgresql)作为输入?