Changes between Initial Version and Version 1 of AdvancedReport4


Ignore:
Timestamp:
09/24/26 02:07:44 (7 days ago)
Author:
201178
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport4

    v1 v1  
     1= Најпрометни часови во денот =
     2
     3== Опис ==
     4
     5Извештајот го прикажува бројот на нарачки и вкупниот приход групирани по час од денот. Овозможува идентификување на најпрометните периоди.
     6
     7== SQL решение ==
     8
     9{{{
     10CREATE OR REPLACE FUNCTION get_busiest_hours()
     11RETURNS TABLE (
     12    hour_of_day NUMERIC,
     13    order_count BIGINT,
     14    total_items BIGINT,
     15    total_revenue NUMERIC,
     16    avg_order_value NUMERIC
     17)
     18LANGUAGE plpgsql
     19AS $$
     20BEGIN
     21    RETURN QUERY
     22    SELECT
     23        EXTRACT(HOUR FROM o.created_at) AS hour_of_day,
     24        COUNT(DISTINCT o.order_id) AS order_count,
     25        SUM(oi.quantity) AS total_items,
     26        SUM(oi.quantity * oi.unit_price) AS total_revenue,
     27        ROUND(AVG(oi.quantity * oi.unit_price), 2) AS avg_order_value
     28    FROM project.orders o
     29    JOIN project.order_item oi ON oi.order_id = o.order_id
     30    WHERE o.status = 'ПЛАТЕНА'
     31    GROUP BY EXTRACT(HOUR FROM o.created_at)
     32    ORDER BY total_revenue DESC;
     33END;
     34$$;
     35}}}
     36
     37== Релациона алгебра ==
     38
     39{{{
     40O(order_id, created_at, status)
     41OI(order_id, quantity, unit_price)
     42
     43J1 ← O ⨝ O.order_id = OI.order_id OI
     44
     45F1 ← σ status='ПЛАТЕНА' (J1)
     46
     47G ← γ hour_of_day;
     48     COUNT(DISTINCT order_id) → order_count,
     49     SUM(quantity) → total_items,
     50     SUM(quantity * unit_price) → total_revenue,
     51     AVG(quantity * unit_price) → avg_order_value (F1)
     52
     53R ← π hour_of_day, order_count, total_items, total_revenue, avg_order_value (G)
     54
     55R_final ← τ total_revenue DESC (R)
     56}}}