==== Сметки со највисоко вкупно трошење во изминатата година {{{#!sql 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)