wiki:AdvancedReport8

Version 1 (modified by 201178, 7 days ago) ( diff )

--

Најпрофитабилни маси

Опис

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

SQL решение

CREATE OR REPLACE FUNCTION get_top_tables()
RETURNS TABLE (
    table_id INT,
    table_number TEXT,
    capacity INT,
    order_count BIGINT,
    total_revenue NUMERIC,
    avg_order_value NUMERIC,
    revenue_per_seat NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        rt.table_id,
        rt.table_number::TEXT,
        rt.capacity,
        COUNT(DISTINCT o.order_id) AS order_count,
        SUM(p.amount) AS total_revenue,
        ROUND(AVG(p.amount), 2) AS avg_order_value,
        ROUND(SUM(p.amount) / rt.capacity, 2) AS revenue_per_seat
    FROM project.restaurant_table rt
    JOIN project.orders o ON o.table_id = rt.table_id
    JOIN project.payment p ON p.order_id = o.order_id
    WHERE o.status = 'ПЛАТЕНА'
    GROUP BY rt.table_id, rt.table_number, rt.capacity
    ORDER BY total_revenue DESC;
END;
$$;

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

RT(table_id, table_number, capacity)
O(order_id, table_id, status)
P(payment_id, order_id, amount)

J1 ← RT ⨝ RT.table_id = O.table_id O
J2 ← J1 ⨝ O.order_id = P.order_id P

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

G ← γ table_id, table_number, capacity;
     COUNT(DISTINCT order_id) → order_count,
     SUM(amount) → total_revenue,
     AVG(amount) → avg_order_value,
     SUM(amount)/capacity → revenue_per_seat (F1)

R ← π table_id, table_number, capacity, order_count, total_revenue, avg_order_value, revenue_per_seat (G)

R_final ← τ total_revenue DESC (R)
Note: See TracWiki for help on using the wiki.