Најпрометни часови во денот
Опис
Извештајот го прикажува бројот на нарачки и вкупниот приход групирани по час од денот. Овозможува идентификување на најпрометните периоди.
SQL решение
CREATE OR REPLACE FUNCTION get_busiest_hours()
RETURNS TABLE (
hour_of_day NUMERIC,
order_count BIGINT,
total_items BIGINT,
total_revenue NUMERIC,
avg_order_value NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
EXTRACT(HOUR FROM o.created_at) AS hour_of_day,
COUNT(DISTINCT o.order_id) AS order_count,
SUM(oi.quantity) AS total_items,
SUM(oi.quantity * oi.unit_price) AS total_revenue,
ROUND(AVG(oi.quantity * oi.unit_price), 2) AS avg_order_value
FROM project.orders o
JOIN project.order_item oi ON oi.order_id = o.order_id
WHERE o.status = 'ПЛАТЕНА'
GROUP BY EXTRACT(HOUR FROM o.created_at)
ORDER BY total_revenue DESC;
END;
$$;
Релациона алгебра
O(order_id, created_at, status)
OI(order_id, quantity, unit_price)
J1 ← O ⨝ O.order_id = OI.order_id OI
F1 ← σ status='ПЛАТЕНА' (J1)
G ← γ hour_of_day;
COUNT(DISTINCT order_id) → order_count,
SUM(quantity) → total_items,
SUM(quantity * unit_price) → total_revenue,
AVG(quantity * unit_price) → avg_order_value (F1)
R ← π hour_of_day, order_count, total_items, total_revenue, avg_order_value (G)
R_final ← τ total_revenue DESC (R)
Last modified
6 days ago
Last modified on 09/24/26 02:07:44
Note:
See TracWiki
for help on using the wiki.
