| | 67 | |
| | 68 | === 2.1 vw_sales_by_day_of_week - Кој ден од неделата се продава најмногу? === |
| | 69 | |
| | 70 | Прикажува колку продажби направил секој вработен, колку приход донел и неговото место во рангирањето. |
| | 71 | |
| | 72 | {{{#!sql |
| | 73 | CREATE OR REPLACE VIEW vw_sales_by_day_of_week AS |
| | 74 | SELECT |
| | 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 |
| | 89 | FROM sale s |
| | 90 | JOIN sale_item si ON s.sale_id = si.sale_id |
| | 91 | GROUP BY EXTRACT(ISODOW FROM s.date_time) |
| | 92 | ORDER BY day_number; |
| | 93 | }}} |
| | 94 | |
| | 95 | === 2.2 vw_employee_sales_ranking - Кој продавач продава повеќе? === |
| | 96 | |
| | 97 | Кои денови се зафатени, а кои мирни за планирање на персоналот. |
| | 98 | |
| | 99 | {{{#!sql |
| | 100 | CREATE OR REPLACE VIEW vw_employee_sales_ranking AS |
| | 101 | SELECT |
| | 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 |
| | 111 | FROM users u |
| | 112 | LEFT JOIN sale s ON u.user_id = s.user_id |
| | 113 | GROUP BY u.user_id, u.full_name, u.role |
| | 114 | HAVING COUNT(s.sale_id) > 0 |
| | 115 | ORDER BY total_revenue DESC; |
| | 116 | }}} |