首页 > 解决方案 > sql在年底获得余额

问题描述

我有一个单年的交易表,如果值为负数或贷记交易值为正,则金额指示借方交易。

现在在一个给定的月份,如果借记记录的数量少于 3 或者如果一个月的借记总和少于 100,那么我想收取 5 的费用。

我想在 postgre 中为此构建和 sql 查询:

select sum(amount), count(1), date_part('month', date) as month from transactions where amount < 0 group by month;

我能够获得每月级别的记录,我被困在如何进一步进行并获得结果。

标签: sqlpostgresqldatetimesumdate-arithmetic

解决方案


这种方法怎么样?

SELECT
  SUM(
    CASE 
      WHEN usage.amount_s > 100
        OR usage.event_c > 3
        THEN 0 
      ELSE 5
    END
  ) AS YEAR_FEE
FROM (SELECT 1 AS month UNION
      SELECT 2 UNION
      SELECT 3 UNION
      SELECT 4 UNION
      SELECT 5 UNION
      SELECT 6 UNION
      SELECT 7 UNION
      SELECT 8 UNION
      SELECT 9 UNION
      SELECT 10 UNION
      SELECT 11 UNION
      SELECT 12
) months
  LEFT OUTER JOIN
 (
  SELECT 
    sum(amount) AS amount_s,
    count(1) event_c,
    date_part('month', date) AS month
  FROM transactions
  WHERE amount < 0
  GROUP BY month
) usage ON months.month = usage.month;

推荐阅读