Changes between Version 2 and Version 3 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
02/20/26 02:23:48 (4 days ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v2 v3  
    6565
    6666== 2.Views ==
     67
     68=== 2.1 vw_sales_by_day_of_week - Кој ден од неделата се продава најмногу? ===
     69
     70Прикажува колку продажби направил секој вработен, колку приход донел и неговото место во рангирањето.
     71
     72{{{#!sql
     73CREATE OR REPLACE VIEW vw_sales_by_day_of_week AS
     74SELECT
     75    EXTRACT(ISODOW FROM s.date_time)::INT AS day_number,
     76    CASE EXTRACT(ISODOW FROM s.date_time)::INT
     77        WHEN 1 THEN 'Monday'
     78        WHEN 2 THEN 'Tuesday'
     79        WHEN 3 THEN 'Wednesday'
     80        WHEN 4 THEN 'Thursday'
     81        WHEN 5 THEN 'Friday'
     82        WHEN 6 THEN 'Saturday'
     83        WHEN 7 THEN 'Sunday'
     84    END AS day_name,
     85    COUNT(DISTINCT s.sale_id) AS total_sales,
     86    SUM(s.total_amount)       AS total_revenue,
     87    ROUND(AVG(s.total_amount), 2) AS avg_sale_value,
     88    SUM(si.quantity)          AS total_items_sold
     89FROM sale s
     90JOIN sale_item si ON s.sale_id = si.sale_id
     91GROUP BY EXTRACT(ISODOW FROM s.date_time)
     92ORDER BY day_number;
     93}}}
     94
     95=== 2.2 vw_employee_sales_ranking - Кој продавач продава повеќе? ===
     96
     97Кои денови се зафатени, а кои мирни за планирање на персоналот.
     98
     99{{{#!sql
     100CREATE OR REPLACE VIEW vw_employee_sales_ranking AS
     101SELECT
     102    u.user_id,
     103    u.full_name,
     104    u.role,
     105    COUNT(DISTINCT s.sale_id) AS total_sales,
     106    COALESCE(SUM(s.total_amount), 0) AS total_revenue,
     107    ROUND(COALESCE(AVG(s.total_amount), 0), 2) AS avg_sale_value,
     108    COUNT(DISTINCT s.customer_id) AS unique_customers,
     109    RANK() OVER (ORDER BY COALESCE(SUM(s.total_amount), 0) DESC)
     110        AS revenue_rank
     111FROM users u
     112LEFT JOIN sale s ON u.user_id = s.user_id
     113GROUP BY u.user_id, u.full_name, u.role
     114HAVING COUNT(s.sale_id) > 0
     115ORDER BY total_revenue DESC;
     116}}}