wiki:AdvancedReport18

Сметки со највисоко вкупно трошење во изминатата година

CREATE OR REPLACE FUNCTION get_top_accounts_last_year()
RETURNS TABLE (
    account_name TEXT,
    total_spent NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        ta.account_name, 
        COALESCE(SUM(tb.spent_amount), 0) AS total_spent
    FROM transaction_breakdown tb
    JOIN transaction t 
        ON tb.transaction_id = t.transaction_id
    JOIN transaction_account ta 
        ON tb.transaction_account_id = ta.transaction_account_id
    WHERE t.date >= NOW() - INTERVAL '1 YEAR'
    GROUP BY ta.account_name
    ORDER BY total_spent DESC
    LIMIT 10;
END;
$$;

Релациона алгебра

  • TA(transaction_account_id, account_name)
  • TB(transaction_id, transaction_account_id, spent_amount)
  • T(transaction_id, date)

JOIN на табелите:

  • J1 ← TA ⨝TA.transaction_account_id = TB.transaction_account_id TB
  • J2 ← J1 ⨝TB.transaction_id = T.transaction_id T

Филтрирање по последна година:

  • F ← σdate >= NOW() - INTERVAL '1 YEAR' (J2)

Групирање и агрегација по сметка:

  • G ← γaccount_name; SUM(spent_amount) → total_spent(F)

Подредување по вкупно потрошено и лимитирање:

  • R_final ← τtotal_spent DESC LIMIT 10(G)
Last modified 4 days ago Last modified on 12/29/25 20:05:36
Note: See TracWiki for help on using the wiki.