===== Сумарни податоци за тагови Сумирани податоци каде редовите се месеци, а колоните се тагови, а во полината се покажуваат различни сумирани податоци: - Вкупен број на трансакции {{{#!sql 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 $$; }}} - Вкупно примени средства {{{#!sql 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 $$; }}} - Вкупно потрошени средства {{{#!sql 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 $$; }}}