==== Сумарни приходи и расходи по месеци Сумарните приходи и расходи (состојба) во целиот систем, поделени по месеци, со цел да се видат проблематичните месеци, се пресметува вкупниот приход и расход за секој месец, а разликата меѓу нив ќе ја даде состојбата {{{#!sql 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)