wiki:Напредни извештаи од базата (SQL и складирани процедури)

Version 1 (modified by 183175, 17 hours ago) ( diff )

--

Напредни извештаи од базата (SQL и складирани процедури)

Неделен,Месечен,Годишен извештај

Weekly
Креираме прашалник каде велиме "за секој ден од неделата во последни 7 дена,
прикажи број нарачки и вкупен приход" :

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
Креираме прашалник каде велиме "за секој месец, преброј ги нарачките и пресметај вкупен приход" :

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
Креираме прашалник каде велиме "за секоја година, прикажи колку нарачки имало и колку приход е остварено" :

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" :

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" :

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;


Нови регистрации по месец
Креираме прашалник каде велиме "за секој месец, прикажи колку нови корисници се регистрирале" :

SELECT 
  TO_CHAR(created_at, 'Mon YYYY') AS label,
  COUNT(*) AS new_users
FROM customers
GROUP BY label
ORDER BY MIN(created_at);


Note: See TracWiki for help on using the wiki.