wiki:AdvancedReport7

Version 1 (modified by 211101, 5 days ago) ( diff )

--

Сумарни податоци за тагови

Сумирани податоци каде редовите се месеци, а колоните се тагови, а во полината се покажуваат различни сумирани податоци:

  • Вкупен број на трансакции
    DO $$
    DECLARE
        col_list TEXT; -- Листа на тагови за изведување на пивот
        dynamic_query TEXT; -- Динамичко SQL прашање
    BEGIN
        -- Чекор 1: Динамички се генерира листа на колони
        SELECT STRING_AGG(DISTINCT format('SUM(CASE WHEN tg.tag_name = %L THEN 1 ELSE 0 END) AS %I', tag_name, tag_name), ', ')
        INTO col_list
        FROM tag;
    
        -- Чекор 2: Се гради динамичкото прашање
        dynamic_query := format(
            'SELECT 
                TO_CHAR(t.date, ''YYYY-MM'') AS transaction_month,
                %s
            FROM 
                transaction t
            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 
                transaction_month
            ORDER BY 
                transaction_month;',
            col_list
        );
    
        -- Чекор 3: Извршување на динамичкото прашање
        EXECUTE dynamic_query;
    END $$;
    
  • Вкупно примени средства
    DO $$
    DECLARE
        col_list TEXT; -- Листа на тагови за изведување на пивот
        dynamic_query TEXT; -- Динамичко SQL прашање
    BEGIN
        -- Чекор 1: Динамички се генерира листа на колони
        SELECT STRING_AGG(DISTINCT format('SUM(CASE WHEN tg.tag_name = %L THEN tb.earned_amount ELSE 0 END) AS %I', tag_name, tag_name), ', ')
        INTO col_list
        FROM tag;
    
        -- Чекор 2: Се гради динамичкото прашање
        dynamic_query := format(
            'SELECT 
                TO_CHAR(t.date, ''YYYY-MM'') AS transaction_month,
                %s
            FROM 
                transaction t
            JOIN 
                transaction_breakdown tb ON t.transaction_id = tb.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 
                transaction_month
            ORDER BY 
                transaction_month;',
            col_list
        );
    
        -- Чекор 3: Извршување на динамичкото прашање
        EXECUTE dynamic_query;
    END $$;
    
  • Вкупно потрошени средства
    DO $$
    DECLARE
        col_list TEXT; -- Листа на тагови за изведување на пивот
        dynamic_query TEXT; -- Динамичко SQL прашање
    BEGIN
        -- Чекор 1: Динамички се генерира листа на колони
        SELECT STRING_AGG(DISTINCT format('SUM(CASE WHEN tg.tag_name = %L THEN tb.spent_amount ELSE 0 END) AS %I', tag_name, tag_name), ', ')
        INTO col_list
        FROM tag;
    
        -- Чекор 2: Се гради динамичкото прашање
        dynamic_query := format(
            'SELECT 
                TO_CHAR(t.date, ''YYYY-MM'') AS transaction_month,
                %s
            FROM 
                transaction t
            JOIN 
                transaction_breakdown tb ON t.transaction_id = tb.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 
                transaction_month
            ORDER BY 
                transaction_month;',
            col_list
        );
    
        -- Чекор 3: Извршување на динамичкото прашање
        EXECUTE dynamic_query;
    END $$;
    
Note: See TracWiki for help on using the wiki.