| 94 | \\ |
| 95 | {{{#!sql |
| 96 | SELECT |
| 97 | p.id_product, |
| 98 | p.product_name, |
| 99 | sz.size_label AS size, |
| 100 | COALESCE(SUM(s.quantity), 0) AS current_stock, |
| 101 | ROUND(AVG(cq.weekly_sales), 2) AS avg_weekly_sales, |
| 102 | CASE |
| 103 | WHEN COALESCE(SUM(s.quantity), 0) <= ROUND(AVG(cq.weekly_sales), 2) THEN 'ИТНО' |
| 104 | ELSE 'Набљудувај' |
| 105 | END AS status |
| 106 | FROM products p |
| 107 | JOIN stock s ON p.id_product = s.id_product |
| 108 | JOIN sizes sz ON s.id_size = sz.id |
| 109 | LEFT JOIN ( |
| 110 | SELECT |
| 111 | s.id_product, |
| 112 | s.id_size, |
| 113 | COUNT(*) AS weeks, |
| 114 | SUM(c.quantity)::decimal / COUNT(DISTINCT DATE_TRUNC('week', o.order_date)) AS weekly_sales |
| 115 | FROM contains c |
| 116 | JOIN orders o ON c.id_order = o.id_order |
| 117 | JOIN stock s ON c.id_stock = s.id_stock |
| 118 | WHERE o.order_date >= NOW() - INTERVAL '4 weeks' |
| 119 | GROUP BY s.id_product, s.id_size |
| 120 | ) cq ON cq.id_product = s.id_product AND cq.id_size = s.id_size |
| 121 | GROUP BY p.id_product, p.product_name, sz.size_label |
| 122 | HAVING ROUND(AVG(cq.weekly_sales), 2) IS NOT NULL |
| 123 | ORDER BY status DESC, avg_weekly_sales DESC; |
| 124 | `); |
| 125 | }}} |
| 126 | \\ |