Changes between Version 1 and Version 2 of AdvancedReport22


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport22

    v1 v2  
    1 ===== Годишни трендови на трансакции за цел систем
     1==== Годишни трендови на трансакции за цел систем
    22Трошења според сметки за секој квартал од тековната година
    33{{{#!sql
    4 SELECT
    5     ta.account_name,
    6     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent,
    7     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent,
    8     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent,
    9     SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent
    10 FROM
    11     transaction_breakdown tb
    12 JOIN transaction t ON tb.transaction_id = t.transaction_id
    13 JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id
    14 WHERE
    15     EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE)
    16 GROUP BY
    17     ta.account_name
    18 ORDER BY
    19     ta.account_name;
     4CREATE OR REPLACE FUNCTION get_quarterly_spending_trends_system()
     5RETURNS TABLE (
     6    account_name TEXT,
     7    q1_spent NUMERIC,
     8    q2_spent NUMERIC,
     9    q3_spent NUMERIC,
     10    q4_spent NUMERIC
     11)
     12LANGUAGE plpgsql
     13AS $$
     14BEGIN
     15    RETURN QUERY
     16    SELECT
     17        ta.account_name,
     18        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent,
     19        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent,
     20        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent,
     21        SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent
     22    FROM transaction_breakdown tb
     23    JOIN transaction t
     24        ON tb.transaction_id = t.transaction_id
     25    JOIN transaction_account ta
     26        ON tb.transaction_account_id = ta.transaction_account_id
     27    WHERE EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE)
     28    GROUP BY ta.account_name
     29    ORDER BY ta.account_name;
     30END;
     31$$;
    2032}}}
     33
     34==== Релациона алгебра
     35- TA(transaction_account_id, account_name)
     36- TB(transaction_id, transaction_account_id, spent_amount)
     37- T(transaction_id, date)
     38
     39JOIN на табелите:
     40- J1 ← TA ⨝,,TA.transaction_account_id = TB.transaction_account_id,, TB
     41- J2 ← J1 ⨝,,TB.transaction_id = T.transaction_id,, T
     42
     43Филтрирање по тековна година:
     44- F ← σ,,EXTRACT(YEAR FROM date) = EXTRACT(YEAR FROM CURRENT_DATE),,(J2)
     45
     46Агрегација по квартали:
     47- G ← γ,,account_name; SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 1 THEN spent_amount ELSE 0 END) → q1_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 2 THEN spent_amount ELSE 0 END) → q2_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 3 THEN spent_amount ELSE 0 END) → q3_spent, SUM(CASE WHEN EXTRACT(QUARTER FROM date) = 4 THEN spent_amount ELSE 0 END) → q4_spent,,(F)
     48
     49Подредување по име на сметка:
     50- R_final ← τ,,account_name,,(G)