Сумарни приходи и расходи по месеци
Сумарните приходи и расходи (состојба) во целиот систем, поделени по месеци, со цел да се видат проблематичните месеци, се пресметува вкупниот приход и расход за секој месец, а разликата меѓу нив ќе ја даде состојбата
CREATE OR REPLACE FUNCTION get_monthly_system_balance()
RETURNS TABLE (
month TEXT,
total_income NUMERIC,
total_expense NUMERIC,
net_balance NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
TO_CHAR(t.date, 'YYYY-MM'),
SUM(tb.earned_amount),
SUM(tb.spent_amount),
SUM(tb.earned_amount) - SUM(tb.spent_amount)
FROM transaction t
JOIN transaction_breakdown tb ON t.transaction_id = tb.transaction_id
GROUP BY TO_CHAR(t.date, 'YYYY-MM')
ORDER BY month;
END;
$$;
Проблематичен месец е месец каде што net_balance е негативен. Резултатите можат да се прикажат во графикон (на пример, бар график или линиски график) за подобра анализа. Може да се додаде процентуална промена меѓу месеците за да се откријат трендовите во приходите и трошоците
Релациона алгебра
- T(transaction_id, date)
- TB(transaction_id, earned_amount, spent_amount)
JOIN на табелите:
- J1 ← T ⨝T.transaction_id = TB.transaction_id TB
Групирање по месец и пресметка на приходи и расходи:
- M ← γmonth = FORMAT(date, 'YYYY-MM'); Σ(earned_amount) → total_income, Σ(spent_amount) → total_expense(J1)
Пресметка на нето состојба:
- R ← πmonth, total_income, total_expense, (total_income − total_expense) → net_balance(M)
Подредување по месец:
- R_final ← τmonth(R)
За само проблематични месеци, се додава уште еден чекор:
Филтрирање на проблематични месеци (негативна состојба):
- P ← σnet_balance < 0(R_final)
