postgre如何在Postgres中进行SQL查询,以查找当年的总余额并应用信贷费用



我对Postgres完全陌生,我找不到任何我想做的事情的例子…

我有一张一年的交易表:

金额|日期

12     |  1980-02-12
-200   |  1980-03-06
30     |  1980-03-14

流入资金的正向交易。

信用付款的负交易记录。

我需要返回一个全年的总额,其中也反映出每月使用信用额度低于400美元的情况下收取20美元的费用,比如:

total
-------
80,401

我的想法是,我会首先找到这样几个月的总积分。。。

WITH month_credit_totals 
AS
(SELECT 
SUM(amount) AS total_credit 
FROM transactions 
WHERE amount < 0
GROUP BY DATE_TRUNC('month', date))

从那里我会发现像这样的信用付款少于400美元的月份。。。

SELECT
COUNT(*)
FROM month_credit_totals
WHERE total_credit <= -400

我想把这个数字省下来,从12中减去,然后把这个结果乘以-20,这样就可以得到当年拖欠的信贷费用总额。

然后,我想我可以把amount列加起来,应用总费用金额,这就是我的结果。

但是,作为一个完全的初学者,我在理解语法方面遇到了很多困难,我找不到一种方法来节省变量,做数学运算,并将其应用于总数。当我试图声明一个变量时,我经常会遇到语法错误,这些错误没有给我指明方向。

也许我做这件事的方式完全错了?

如果有任何建议,我将不胜感激。谢谢

您走在了正确的轨道上,但您并不需要将这些变量保存在任何地方,只需快速计算即可。

WITH credit_by_month AS
(
SELECT DATE_TRUNC('month', dt), SUM(amount) AS total_credit
FROM transactions
WHERE amount < 0
GROUP BY DATE_TRUNC('month', dt)
)
SELECT COUNT(*) * 20 AS credit_fee
FROM credit_by_month
WHERE total_credit > -400

这是一个关于dbfiddle的工作演示,它使用随机数据,所以每次都会返回不同的数字。

最新更新