| | 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 | \\ |