| Version 2 (modified by , 4 days ago) ( diff ) |
|---|
Сметки со највисоко вкупно трошење во изминатата година
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)
Note:
See TracWiki
for help on using the wiki.
