Најпрофитабилни маси
Опис
Извештајот ги прикажува масите со најголем вкупен приход, број на нарачки, просечна вредност на нарачка и приход по седиште.
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)
Last modified
7 days ago
Last modified on 09/24/26 02:08:57
Note:
See TracWiki
for help on using the wiki.
