| 4 | | SELECT |
| 5 | | SUM(ta.balance) / (DATE_PART('day', DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 MONTH') - INTERVAL '1 DAY') - DATE_PART('day', CURRENT_DATE)) AS daily_budget |
| 6 | | FROM |
| 7 | | transaction_account ta |
| 8 | | WHERE |
| 9 | | ta.user_id = 101; -- ID на конкретниот корисник |
| | 4 | CREATE OR REPLACE FUNCTION get_daily_budget_user( |
| | 5 | p_user_id INT |
| | 6 | ) |
| | 7 | RETURNS TABLE ( |
| | 8 | daily_budget NUMERIC |
| | 9 | ) |
| | 10 | LANGUAGE plpgsql |
| | 11 | AS $$ |
| | 12 | BEGIN |
| | 13 | RETURN QUERY |
| | 14 | SELECT |
| | 15 | COALESCE(SUM(ta.balance), 0) / |
| | 16 | (DATE_PART('day', DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 MONTH') - INTERVAL '1 DAY') |
| | 17 | - DATE_PART('day', CURRENT_DATE) + 1) AS daily_budget |
| | 18 | FROM transaction_account ta |
| | 19 | WHERE ta.user_id = p_user_id; |
| | 20 | END; |
| | 21 | $$; |
| | 23 | |
| | 24 | ==== Релациона алгебра |
| | 25 | - TA(transaction_account_id, user_id, balance) |
| | 26 | |
| | 27 | Филтрирање по корисник: |
| | 28 | - F ← σ,,user_id = p_user_id,,(TA) |
| | 29 | |
| | 30 | Агрегација на вкупен баланс: |
| | 31 | - S ← γ,,; SUM(balance) → total_balance,,(F) |
| | 32 | |
| | 33 | Пресметка на дневен буџет до крајот на месецот: |
| | 34 | - R_final ← γ,,; total_balance / (DATE_PART('day', DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 MONTH') - INTERVAL '1 DAY')- DATE_PART('day', CURRENT_DATE) + 1) → daily_budget,,(S) |