wiki:AdvancedReport20

Version 2 (modified by 211101, 4 days ago) ( diff )

--

Трансакции според тагови со највисоко трошење за цел систем

CREATE OR REPLACE FUNCTION get_total_spent_by_tag_system()
RETURNS TABLE (
    tag_name TEXT,
    total_spent NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        tg.tag_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 tag_assigned_to_transaction tat 
        ON t.transaction_id = tat.transaction_id
    JOIN tag tg 
        ON tat.tag_id = tg.tag_id
    GROUP BY tg.tag_name
    ORDER BY total_spent DESC;
END;
$$;

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

  • TB(transaction_id, spent_amount)
  • T(transaction_id, date)
  • TAT(tag_id, transaction_id)
  • TG(tag_id, tag_name)

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

  • J1 ← TB ⨝TB.transaction_id = T.transaction_id T
  • J2 ← J1 ⨝T.transaction_id = TAT.transaction_id TAT
  • J3 ← J2 ⨝TAT.tag_id = TG.tag_id TG

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

  • G ← γtag_name; SUM(spent_amount) → total_spent(J3)

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

  • R_final ← τtotal_spent DESC(G)
Note: See TracWiki for help on using the wiki.