wiki:AdvancedReport7

Месечни приходи и расходи

Опис

Извештајот ги прикажува вкупните приходи по месеци, заедно со бројот на нарачки, просечната плаќања и бројот на активни келнери.

SQL решение

CREATE OR REPLACE FUNCTION get_monthly_revenue()
RETURNS TABLE (
    month TEXT,
    order_count BIGINT,
    total_revenue NUMERIC,
    avg_payment NUMERIC,
    tables_used BIGINT,
    waiters_active BIGINT
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        TO_CHAR(p.payment_date, 'YYYY-MM')::TEXT AS month,
        COUNT(DISTINCT o.order_id) AS order_count,
        SUM(p.amount) AS total_revenue,
        ROUND(AVG(p.amount), 2) AS avg_payment,
        COUNT(DISTINCT o.table_id) AS tables_used,
        COUNT(DISTINCT o.user_id) AS waiters_active
    FROM project.payment p
    JOIN project.orders o ON o.order_id = p.order_id
    WHERE o.status = 'ПЛАТЕНА'
    GROUP BY TO_CHAR(p.payment_date, 'YYYY-MM')
    ORDER BY month DESC;
END;
$$;

Релациона алгебра

P(payment_id, order_id, amount, payment_date)
O(order_id, table_id, user_id, status)

J1 ← P ⨝ P.order_id = O.order_id O

F1 ← σ status='ПЛАТЕНА' (J1)

G ← γ month;
     COUNT(DISTINCT order_id) → order_count,
     SUM(amount) → total_revenue,
     AVG(amount) → avg_payment,
     COUNT(DISTINCT table_id) → tables_used,
     COUNT(DISTINCT user_id) → waiters_active (F1)

R ← π month, order_count, total_revenue, avg_payment, tables_used, waiters_active (G)

R_final ← τ month DESC (R)
Last modified 7 days ago Last modified on 09/24/26 02:08:45
Note: See TracWiki for help on using the wiki.