wiki:AdvancedReport5

Stores ordered by total revenue in the last calendar year from highest to lowest

CREATE OR REPLACE FUNCTION get_stores_by_last_calendar_year_revenue()
RETURNS TABLE (
    store_id INT,
    store_name TEXT,
    number_of_orders BIGINT,
    total_quantity_sold BIGINT,
    total_revenue NUMERIC
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT
        s.store_id,
        s.name AS store_name,
        COUNT(DISTINCT o.order_num) AS number_of_orders,
        COALESCE(SUM(o.quantity), 0) AS total_quantity_sold,
        COALESCE(
            SUM(
                p.price
                * o.quantity
                * (1 - COALESCE(o.discount, 0) / 100.0)
            ),
            0
        ) AS total_revenue
    FROM store s
    LEFT JOIN sells se
        ON s.store_id = se.store_id
    LEFT JOIN product p
        ON se.code = p.code
    LEFT JOIN includes i
        ON p.code = i.code
    LEFT JOIN "order" o
        ON i.order_num = o.order_num
        AND o.last_modified_date >= DATE_TRUNC(
            'year',
            CURRENT_DATE
        ) - INTERVAL '1 year'
        AND o.last_modified_date < DATE_TRUNC(
            'year',
            CURRENT_DATE
        )
    GROUP BY
        s.store_id,
        s.name
    ORDER BY
        total_revenue DESC;
END;
$$;

Relational Algebra

  • P(code, price, availability, description, ...)
  • O(order_num, quantity, status, last_modified_date, payment_method, discount)
  • I(code, order_num)
  • S(store_ID, name, date_of_founding, physical_address, store_email, rating)
  • SE(code, store_ID, quantity, discount)

JOIN stores with products they sell:

  • J1 ← S ⟕S.store_ID = SE.store_ID SE
  • J2 ← J1 ⟕SE.code = P.code P

JOIN products with orders:

  • J3 ← J2 ⟕P.code = I.code I
  • J4 ← J3 ⟕I.order_num = O.order_num O

FILTER orders from the last calendar year:

  • F ← σlast_modified_date ≥ start_date

∧ last_modified_date < end_date(J4)

Calculate revenue for each order:

  • FORMULA: order_revenue = order_total × (1 - COALESCE(discount, 0) / 100)
  • R1 ← πstore_ID, store_name, order_num, quantity,

price × quantity × (1 - COALESCE(discount, 0) / 100) → order_revenue(F)

Calculate revenue for each store:

  • R2 ← γstore_ID, store_name;

COUNT(DISTINCT order_num) → number_of_orders, Σ(quantity) → total_quantity_sold, Σ(order_revenue) → total_revenue (R1)

  • For stores without orders in the last calendar year:
    • number_of_orders = 0
    • total_quantity_sold = 0
    • total_revenue = 0

Sort by store revenue:

  • R_final ← τtotal_revenue DESC(R2)
Last modified 29 hours ago Last modified on 08/21/26 05:48:22
Note: See TracWiki for help on using the wiki.