== Напредни извештаи од базата (SQL и складирани процедури) = Неделен,Месечен,Годишен извештај '''Weekly''' \\ Креираме прашалник каде велиме "за секој ден од неделата во последни 7 дена,\\ прикажи број нарачки и вкупен приход" : \\ \\ {{{#!sql SELECT TO_CHAR(order_date, 'Dy') AS label, COUNT(*) AS orders, SUM(total_price) AS revenue FROM orders WHERE order_date >= NOW() - INTERVAL '7 days' GROUP BY label ORDER BY MIN(order_date); }}} \\ '''Monthly''' \\ Креираме прашалник каде велиме "за секој месец, преброј ги нарачките и пресметај вкупен приход" : \\ \\ {{{#!sql SELECT TO_CHAR(order_date, 'Mon') AS label, COUNT(*) AS orders, SUM(total_price) AS revenue FROM orders GROUP BY label ORDER BY MIN(order_date); }}} \\ '''Yearly''' \\ Креираме прашалник каде велиме "за секоја година, прикажи колку нарачки имало и колку приход е остварено" : \\ \\ {{{#!sql SELECT EXTRACT(YEAR FROM order_date)::INT AS label, COUNT(*) AS orders, SUM(total_price) AS revenue FROM orders GROUP BY label ORDER BY label; }}} \\ = Најпродавани продукти,Топ клиенти,Нови регистрации по месец '''Најпродавани продукти''' \\ Креираме прашалник каде велиме "за секој продукт, пресметај колку вкупно парчиња се продадени \\ (збир на quantity), сортирај ги и земи ги првите 5" : \\ \\ {{{#!sql SELECT p.product_name AS label, SUM(c.quantity) AS total_sold FROM contains c JOIN stock s ON c.id_stock = s.id_stock JOIN products p ON s.id_product = p.id_product GROUP BY p.product_name ORDER BY total_sold DESC LIMIT 5; }}} \\ '''Топ клиенти''' \\ Креираме прашалник каде велиме "да се пресмета колку трошел секој клиент вкупно,\\ и да се сортира според таа сума,на крај да ги врати ги првите 5" : \\ \\ {{{#!sql SELECT c.first_name || ' ' || c.last_name AS label, SUM(o.total_price) AS total_spent FROM orders o JOIN customers c ON o.id_customer = c.id_customer GROUP BY c.first_name, c.last_name ORDER BY total_spent DESC LIMIT 5; }}} \\ '''Нови регистрации по месец''' \\ Креираме прашалник каде велиме "за секој месец, прикажи колку нови корисници се регистрирале" : \\ \\ {{{#!sql SELECT TO_CHAR(created_at, 'Mon YYYY') AS label, COUNT(*) AS new_users FROM customers GROUP BY label ORDER BY MIN(created_at); }}} \\ == Предикција на производи кои наскоро ќе ги снема на залиха Целта со оваа предикција е да направиме SQL query кое ќе ги излиста производите кои \\ веројатно ќе останат без залиха до крајот на неделата, врз основа на просечна неделна продажба.\\ Првин да потенцираме, ова стои само кога админот е најавен на страна {{{Предикција}}}, односно фајловите {{{prediction.html}}} и {{{prediction.js}}}.\\ Креираме повик до API за предикција на ризична залиха \\ кое е поставено на {{{app.js}}} како {{{/admin/stock-alerts}}}.\\ Испраќаме авторизирано {{{GET}}} барање до backend за да добиеме податоци\\ за сите продукти и нивната состојба.\\ Ги добиваме сите продукти со следниве карактеристики: \\ {{{product_name}}}, {{{size}}}, {{{current_stock}}}, {{{avg_weekly_sales}}}, {{{status}}}.\\ Најпрво ќе бидат производите со најмногу продажба:\\ {{{#!sql data.sort((a, b) => b.avg_weekly_sales - a.avg_weekly_sales); }}} \\ Рачно правиме категоризација според редослед за јасен преглед: \\ Првите 3 → {{{ИТНО}}} \\ Следни 2 → {{{Набљудувај}}} \\ Останати → {{{Стабилно}}} \\ [[Image(prediction.png, height=300px)]] \\