Changes between Initial Version and Version 1 of AdvancedReport1


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport1

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