Changes between Initial Version and Version 1 of AdvancedReport5


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport5

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