我有一个一年的交易表,其中的金额表示借方交易,如果值为负或贷方交易值为正。
现在,在给定的月份中,如果借记记录的数量小于3,或者如果一个月的借记总数小于100,那么我要收取5的费用。
我想在postgre中为此构建SQL查询:
select sum(amount), count(1), date_part('month', date) as month from transactions where amount < 0 group by month;
我能够得到每月的记录水平,我坚持如何进一步进行,并得到结果。
5条答案
按热度按时间7gcisfzg1#
您可以首先使用
generate_series()
生成月份系列,然后将其与事务上的聚合查询连接,最后在外部查询中实现业务逻辑:Demo on DB Fiddle:
4ktjp1zp2#
这个方法怎么样?
czq61nw13#
首先,必须使用返回所有月份(1-12)的结果集,并使用
LEFT
连接将其连接到表。然后聚合以获得每个月的金额总和,并使用条件聚合从满足条件的月份中减去5。
最后使用
SUM()
窗口函数对每个月的结果求和:请参见demo。
结果:
mqxuamgl4#
我想你可以使用汉文条款。
avwztpqn5#
选择
sum(amount)- 5*(12-(选择count(*)from(选择月份、count(amount)、sum(amount)from交易,其中金额〈0,按月份分组,具有Count(amount)〉=3和Sum(amount)〈=-100)))作为交易的余额;