Changes between Initial Version and Version 1 of AdvancedReport2


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport2

    v1 v1  
     1= Најпрофитабилни категории по месеци =
     2
     3== Опис ==
     4
     5Извештајот ги прикажува сите категории на производи, групирани по месец, со вкупниот приход и бројот на продадени артикли. Овозможува анализа на сезонските трендови по категорија.
     6
     7== SQL решение ==
     8
     9{{{
     10CREATE OR REPLACE FUNCTION get_category_revenue_by_month()
     11RETURNS TABLE (
     12    category_id INT,
     13    category_name TEXT,
     14    month TEXT,
     15    total_items_sold BIGINT,
     16    total_revenue NUMERIC,
     17    order_count BIGINT
     18)
     19LANGUAGE plpgsql
     20AS $$
     21BEGIN
     22    RETURN QUERY
     23    SELECT
     24        c.category_id,
     25        c.name::TEXT AS category_name,
     26        TO_CHAR(o.created_at, 'YYYY-MM')::TEXT AS month,
     27        SUM(oi.quantity) AS total_items_sold,
     28        SUM(oi.quantity * oi.unit_price) AS total_revenue,
     29        COUNT(DISTINCT o.order_id) AS order_count
     30    FROM project.order_item oi
     31    JOIN project.orders o ON o.order_id = oi.order_id
     32    JOIN project.product p ON p.product_id = oi.product_id
     33    JOIN project.category c ON c.category_id = p.category_id
     34    WHERE o.status = 'ПЛАТЕНА'
     35      AND o.created_at >= NOW() - INTERVAL '12 months'
     36    GROUP BY c.category_id, c.name, TO_CHAR(o.created_at, 'YYYY-MM')
     37    ORDER BY month DESC, total_revenue DESC;
     38END;
     39$$;
     40}}}
     41
     42== Релациона алгебра ==
     43
     44{{{
     45P(product_id, category_id)
     46C(category_id, name)
     47O(order_id, status, created_at)
     48OI(order_id, product_id, quantity, unit_price)
     49
     50J1 ← OI ⨝ OI.order_id = O.order_id O
     51J2 ← J1 ⨝ OI.product_id = P.product_id P
     52J3 ← J2 ⨝ P.category_id = C.category_id C
     53
     54F1 ← σ status='ПЛАТЕНА' ∧ created_at ≥ NOW() - INTERVAL '12 months' (J3)
     55
     56G ← γ category_id, category_name, month;
     57     SUM(quantity) → total_items_sold,
     58     SUM(quantity * unit_price) → total_revenue,
     59     COUNT(DISTINCT order_id) → order_count (F1)
     60
     61R ← π category_id, category_name, month, total_items_sold, total_revenue, order_count (G)
     62
     63R_final ← τ month DESC, total_revenue DESC (R)
     64}}}