Changes between Version 1 and Version 2 of AdvancedReport18


Ignore:
Timestamp:
12/29/25 20:05:36 (5 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport18

    v1 v2  
    1 ===== Сметки со највисоко вкупно трошење во изминатата година
     1==== Сметки со највисоко вкупно трошење во изминатата година
    22{{{#!sql
    3 SELECT
    4     ta.account_name,
    5     SUM(tb.spent_amount) AS total_spent
    6 FROM
    7     transaction_breakdown tb
    8 JOIN transaction t ON tb.transaction_id = t.transaction_id
    9 JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id
    10 WHERE
    11     t.date >= NOW() - INTERVAL '1 YEAR'
    12 GROUP BY
    13     ta.account_name
    14 ORDER BY
    15     total_spent DESC
    16 LIMIT 10;
     3CREATE OR REPLACE FUNCTION get_top_accounts_last_year()
     4RETURNS TABLE (
     5    account_name TEXT,
     6    total_spent NUMERIC
     7)
     8LANGUAGE plpgsql
     9AS $$
     10BEGIN
     11    RETURN QUERY
     12    SELECT
     13        ta.account_name,
     14        COALESCE(SUM(tb.spent_amount), 0) AS total_spent
     15    FROM transaction_breakdown tb
     16    JOIN transaction t
     17        ON tb.transaction_id = t.transaction_id
     18    JOIN transaction_account ta
     19        ON tb.transaction_account_id = ta.transaction_account_id
     20    WHERE t.date >= NOW() - INTERVAL '1 YEAR'
     21    GROUP BY ta.account_name
     22    ORDER BY total_spent DESC
     23    LIMIT 10;
     24END;
     25$$;
    1726}}}
     27
     28==== Релациона алгебра
     29- TA(transaction_account_id, account_name)
     30- TB(transaction_id, transaction_account_id, spent_amount)
     31- T(transaction_id, date)
     32
     33JOIN на табелите:
     34- J1 ← TA ⨝,,TA.transaction_account_id = TB.transaction_account_id,, TB
     35- J2 ← J1 ⨝,,TB.transaction_id = T.transaction_id,, T
     36
     37Филтрирање по последна година:
     38- F ← σ,,date >= NOW() - INTERVAL '1 YEAR',, (J2)
     39
     40Групирање и агрегација по сметка:
     41- G ← γ,,account_name; SUM(spent_amount) → total_spent,,(F)
     42
     43Подредување по вкупно потрошено и лимитирање:
     44- R_final ← τ,,total_spent DESC LIMIT 10,,(G)