| Version 2 (modified by , 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.
