3 | | ===== Просечно трошење во последните 3 дена |
| 3 | ===== Надминување на баланс на една сметка со трансакција |
| 4 | {{{#!sql |
| 5 | SELECT |
| 6 | u.user_id, |
| 7 | u.user_name, |
| 8 | ta.account_name, |
| 9 | ta.balance AS current_balance, |
| 10 | t.transaction_id, |
| 11 | t.transaction_name, |
| 12 | tb.spent_amount AS transaction_amount, |
| 13 | t.date AS transaction_date |
| 14 | FROM |
| 15 | transaction_account ta |
| 16 | JOIN user u ON ta.user_id = u.user_id |
| 17 | JOIN transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| 18 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| 19 | WHERE |
| 20 | tb.spent_amount > ta.balance -- Трансакцијата го надминува балансот на СМЕТКАТА |
| 21 | AND tb.spent_amount > 0 |
| 22 | ORDER BY |
| 23 | u.user_id, ta.account_name, t.date DESC; |
| 24 | }}} |
| 25 | |
| 26 | ===== Надминување на вкупниот баланс на сите сметки на корисникот |
| 27 | Овде ќе го собереме балансот на сите сметки на корисникот и ќе провериме дали сумата на трансакцијата ја надминува таа вкупна вредност |
| 28 | {{{#!sql |
| 29 | WITH total_user_balance AS ( |
| 30 | SELECT |
| 31 | u.user_id, |
| 32 | SUM(ta.balance) AS total_balance |
| 33 | FROM |
| 34 | transaction_account ta |
| 35 | JOIN user u ON ta.user_id = u.user_id |
| 36 | GROUP BY |
| 37 | u.user_id |
| 38 | ) |
| 39 | SELECT |
| 40 | u.user_id, |
| 41 | u.user_name, |
| 42 | SUM(tb.spent_amount) AS total_transaction_amount, |
| 43 | tub.total_balance AS user_total_balance |
| 44 | FROM |
| 45 | transaction_account ta |
| 46 | JOIN user u ON ta.user_id = u.user_id |
| 47 | JOIN transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| 48 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| 49 | JOIN total_user_balance tub ON u.user_id = tub.user_id |
| 50 | WHERE |
| 51 | t.date <= CURRENT_DATE -- Само активни трансакции до денешен датум |
| 52 | GROUP BY |
| 53 | u.user_id, u.user_name, tub.total_balance |
| 54 | HAVING |
| 55 | SUM(tb.spent_amount) > tub.total_balance -- Трансакциите го надминуваат ВКУПНИОТ баланс |
| 56 | ORDER BY |
| 57 | u.user_id; |
| 58 | }}} |
| 59 | |
| 60 | ===== Сумарни приходи и расходи по месеци |
| 61 | Сумарните приходи и расходи (состојба) во целиот систем, поделени по месеци, со цел да се видат проблематичните месеци, се пресметува вкупниот приход и расход за секој месец, а разликата меѓу нив ќе ја даде состојбата |
| 62 | {{{#!sql |
| 63 | SELECT |
| 64 | TO_CHAR(t.date, 'YYYY-MM') AS month, -- Форматирање на датумот во формат "Година-Месец" |
| 65 | SUM(CASE WHEN tb.earned_amount > 0 THEN tb.earned_amount ELSE 0 END) AS total_income, -- Вкупен приход |
| 66 | SUM(CASE WHEN tb.spent_amount > 0 THEN tb.spent_amount ELSE 0 END) AS total_expense, -- Вкупен расход |
| 67 | SUM(CASE WHEN tb.earned_amount > 0 THEN tb.earned_amount ELSE 0 END) - |
| 68 | SUM(CASE WHEN tb.spent_amount > 0 THEN tb.spent_amount ELSE 0 END) AS net_balance -- Нето состојба |
| 69 | FROM |
| 70 | transaction_breakdown tb |
| 71 | JOIN |
| 72 | transaction t ON tb.transaction_id = t.transaction_id |
| 73 | GROUP BY |
| 74 | TO_CHAR(t.date, 'YYYY-MM') -- Групирање по месец |
| 75 | ORDER BY |
| 76 | month; |
| 77 | }}} |
| 78 | Проблематичен месец е месец каде што {{{net_balance}}} е негативен. Резултатите можат да се прикажат во графикон (на пример, бар график или линиски график) за подобра анализа. Може да се додаде процентуална промена меѓу месеците за да се откријат трендовите во приходите и трошоците |
| 79 | |
| 80 | ===== Број на трансакции што ги надминуваат приходите на сметка |
| 81 | {{{#!sql |
| 82 | SELECT |
| 83 | ta.account_name, |
| 84 | COUNT(tb.transaction_id) AS transactions_exceeding_balance |
| 85 | FROM |
| 86 | transaction_account ta |
| 87 | JOIN |
| 88 | transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| 89 | WHERE |
| 90 | tb.spent_amount > ta.balance -- Кога потрошеното е поголемо од состојбата на сметката |
| 91 | GROUP BY |
| 92 | ta.account_name |
| 93 | ORDER BY |
| 94 | transactions_exceeding_balance DESC; |
| 95 | }}} |
| 96 | Ако сакаме да ги добиеме вкупните трансакции кои ги надминуваат средствата низ целиот систем, без групирање по сметки: |
| 97 | {{{#!sql |
| 98 | SELECT |
| 99 | COUNT(tb.transaction_id) AS total_transactions_exceeding_balance |
| 100 | FROM |
| 101 | transaction_account ta |
| 102 | JOIN |
| 103 | transaction_breakdown tb ON ta.transaction_account_id = tb.transaction_account_id |
| 104 | WHERE |
| 105 | tb.spent_amount > ta.balance; |
| 106 | }}} |
| 107 | |
| 108 | ===== Сумарни податоци за тагови |
| 109 | Сумирани податоци каде редовите се месеци, а колоните се тагови, а во полината се покажуваат различни сумирани податоци: |
| 110 | - Вкупен број на трансакции |
| 111 | {{{#!sql |
| 112 | SELECT |
| 113 | TO_CHAR(t.date, 'YYYY-MM') AS transaction_month, |
| 114 | tg.tag_name, |
| 115 | COUNT(t.transaction_id) AS total_transactions |
| 116 | FROM |
| 117 | transaction t |
| 118 | JOIN |
| 119 | tag_assigned_to_transaction tat ON t.transaction_id = tat.transaction_id |
| 120 | JOIN |
| 121 | tag tg ON tat.tag_id = tg.tag_id |
| 122 | GROUP BY |
| 123 | transaction_month, tg.tag_name |
| 124 | ORDER BY |
| 125 | transaction_month, tg.tag_name; |
| 126 | }}} |
| 127 | - Вкупно примени средства |
| 128 | {{{#!sql |
| 129 | SELECT |
| 130 | TO_CHAR(t.date, 'YYYY-MM') AS transaction_month, |
| 131 | tg.tag_name, |
| 132 | SUM(tb.earned_amount) AS total_earned |
| 133 | FROM |
| 134 | transaction t |
| 135 | JOIN |
| 136 | transaction_breakdown tb ON t.transaction_id = tb.transaction_id |
| 137 | JOIN |
| 138 | tag_assigned_to_transaction tat ON t.transaction_id = tat.transaction_id |
| 139 | JOIN |
| 140 | tag tg ON tat.tag_id = tg.tag_id |
| 141 | GROUP BY |
| 142 | transaction_month, tg.tag_name |
| 143 | ORDER BY |
| 144 | transaction_month, tg.tag_name; |
| 145 | }}} |
| 146 | - Вкупно потрошени средства |
| 147 | {{{#!sql |
| 148 | SELECT |
| 149 | TO_CHAR(t.date, 'YYYY-MM') AS transaction_month, |
| 150 | tg.tag_name, |
| 151 | SUM(tb.spent_amount) AS total_spent |
| 152 | FROM |
| 153 | transaction t |
| 154 | JOIN |
| 155 | transaction_breakdown tb ON t.transaction_id = tb.transaction_id |
| 156 | JOIN |
| 157 | tag_assigned_to_transaction tat ON t.transaction_id = tat.transaction_id |
| 158 | JOIN |
| 159 | tag tg ON tat.tag_id = tg.tag_id |
| 160 | GROUP BY |
| 161 | transaction_month, tg.tag_name |
| 162 | ORDER BY |
| 163 | transaction_month, tg.tag_name; |
| 164 | }}} |
| 165 | |
| 166 | ===== Просечно трошење во последните 3 дена за цел систем |
37 | | ===== Просечно дневно трошење за тековниот месец |
38 | | {{{#!sql |
39 | | SELECT |
40 | | SUM(tb.spent_amount) / EXTRACT(DAY FROM CURRENT_DATE) AS average_daily_spending |
41 | | FROM |
42 | | transaction_breakdown tb |
43 | | JOIN transaction t ON tb.transaction_id = t.transaction_id |
44 | | WHERE |
45 | | EXTRACT(MONTH FROM t.date) = EXTRACT(MONTH FROM CURRENT_DATE) |
46 | | AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE) |
47 | | AND t.date <= CURRENT_DATE; |
48 | | }}} |
49 | | |
50 | | ===== Дневен буџет до крајот на месецот |
51 | | Дневен буџет за преостанатите денови од месецот врз основа на вкупниот баланс на сите сметки |
| 222 | ===== Вкупно потрошено во тековниот месец за корисник |
| 223 | Вкупна сума на трошоци во тековниот месец на еден корисник |
| 224 | {{{#!sql |
| 225 | SELECT |
| 226 | SUM(tb.spent_amount) AS total_spent |
| 227 | FROM |
| 228 | transaction_breakdown tb |
| 229 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| 230 | JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id |
| 231 | WHERE |
| 232 | ta.user_id = 101 -- ID на конкретниот корисник |
| 233 | AND EXTRACT(MONTH FROM t.date) = EXTRACT(MONTH FROM CURRENT_DATE) |
| 234 | AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE); |
| 235 | }}} |
| 236 | |
| 237 | ===== Дневен буџет до крајот на месецот за корисник |
| 238 | Дневен буџет базиран на вкупниот баланс на сите сметки на корисникот |
164 | | CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN SUM(tb.spent_amount) ELSE 0 END AS q1_spent, |
165 | | CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN SUM(tb.spent_amount) ELSE 0 END AS q2_spent, |
166 | | CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN SUM(tb.spent_amount) ELSE 0 END AS q3_spent, |
167 | | CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN SUM(tb.spent_amount) ELSE 0 END AS q4_spent |
168 | | FROM |
169 | | transaction_breakdown tb |
170 | | JOIN transaction t ON tb.transaction_id = t.transaction_id |
171 | | JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id |
172 | | WHERE |
173 | | EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM NOW()) |
174 | | GROUP BY |
175 | | ta.account_name, EXTRACT(QUARTER FROM t.date); |
| 414 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent, |
| 415 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent, |
| 416 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent, |
| 417 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent |
| 418 | FROM |
| 419 | transaction_breakdown tb |
| 420 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| 421 | JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id |
| 422 | WHERE |
| 423 | EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE) |
| 424 | GROUP BY |
| 425 | ta.account_name |
| 426 | ORDER BY |
| 427 | ta.account_name; |
| 428 | }}} |
| 429 | |
| 430 | ===== Годишни трендови на трансакции за корисник |
| 431 | Трошења по квартали за тековната година за одреден корисник |
| 432 | {{{#!sql |
| 433 | SELECT |
| 434 | ta.account_name, |
| 435 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 1 THEN tb.spent_amount ELSE 0 END) AS q1_spent, |
| 436 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 2 THEN tb.spent_amount ELSE 0 END) AS q2_spent, |
| 437 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 3 THEN tb.spent_amount ELSE 0 END) AS q3_spent, |
| 438 | SUM(CASE WHEN EXTRACT(QUARTER FROM t.date) = 4 THEN tb.spent_amount ELSE 0 END) AS q4_spent |
| 439 | FROM |
| 440 | transaction_breakdown tb |
| 441 | JOIN transaction t ON tb.transaction_id = t.transaction_id |
| 442 | JOIN transaction_account ta ON tb.transaction_account_id = ta.transaction_account_id |
| 443 | WHERE |
| 444 | ta.user_id = 101 -- ID на конкретниот корисник |
| 445 | AND EXTRACT(YEAR FROM t.date) = EXTRACT(YEAR FROM CURRENT_DATE) |
| 446 | GROUP BY |
| 447 | ta.account_name |
| 448 | ORDER BY |
| 449 | ta.account_name; |