如何在 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 中实现多对多关系?

如何在 Postgresql 中实现对复杂嵌套 JSONB 的全文搜索

如何在流式查询中使用外部数据库(postgresql)作为输入?

MATLAB从入门到精通-如何在MATLAB中实现各种特殊上标?

在PostgreSQL中实现按拼音汉字拼音首字母搜索的例子

在 Greenplum 中实现公用表表达式