| Version 11 (modified by , 4 months ago) ( diff ) |
|---|
Извештај
Неделен,Месечен,Годишен извештај
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);
Функцијата Day(order_date) претставена со релациска алгебра
со помош на групирање (aggregation) :
γ_Day(order_date); count(*), sum(total_price)
(σ_order_date ≥ (CURRENT_DATE - 7)
(Orders))
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);
Функцијата Month(order_date) претставена со релациска алгебра
со помош на групирање (aggregation) :
γ_Month(order_date); count(*), sum(total_price)(Orders)
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;
Функцијата Year(order_date) претставена со релациска алгебра
со помош на групирање (aggregation) :
γ_Year(order_date); count(*), sum(total_price)(Orders)
Најпродавани продукти,Топ клиенти,Нови регистрации по месец
Најпродавани продукти
Креираме прашалник каде велиме "за секој продукт, пресметај колку вкупно парчиња се продадени
(збир на 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;
Функцијата top_products претставена со релациска алгебра каде што имаме
⨝ врска : JOIN меѓу contains, stock, products
π врска : проекција на колоните што се враќаат label и total_sold
γ врска : групирање по име на продукт, собирање на количини
ρ врска : преименување во label
τ_desc(...) врска : сортирање опаѓачки
π_label, total_sold (
τ_desc(total_sold) (
ρ(label ← p.product_name)(
γ_p.product_name; SUM(c.quantity) → total_sold (
(Contains ⨝ Stock ⨝ Products)
)
)
)
)
Топ клиенти
Креираме прашалник каде велиме "да се пресмета колку трошел секој клиент вкупно,
и да се сортира според таа сума,на крај да ги врати ги првите 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;
Функцијата top_clients претставена со релациска алгебра, каде што имаме:
⨝ врска : JOIN меѓу orders и customers
γ врска : групирање по first_name и last_name и собирање на SUM(total_price)
ρ врска : преименување на комбинацијата first_name || ' ' || last_name во label
π врска : проекција на колоните label и total_spent
τ_desc(...) врска : сортирање по total_spent во опаѓачки редослед
LIMIT 5 : се применува како пост-процес за враќање на првите 5 записи
π_label, total_spent (
τ_desc(total_spent) (
ρ(label ← concat(c.first_name, ' ', c.last_name)) (
γ_c.first_name, c.last_name; SUM(o.total_price) → total_spent (
Orders ⨝ Customers
)
)
)
)
Нови регистрации по месец
Креираме прашалник каде велиме "за секој месец, прикажи колку нови корисници се регистрирале" :
SELECT TO_CHAR(created_at, 'Mon YYYY') AS label, COUNT(*) AS new_users FROM customers GROUP BY label ORDER BY MIN(created_at);
Функцијата new_users претставена со релациска алгебра, каде што имаме:
γ врска : групирање по TO_CHAR(created_at, 'Mon YYYY')
ρ врска : преименување на изразот TO_CHAR(...) во label
π врска : проекција на колоните label и new_users
τ(...) врска : сортирање според MIN(created_at) порастечки (од најстаро кон најново)
γ_MonthYear(created_at); COUNT(*) → new_users (Customers)
или
π_label, new_users (
ρ(label ← TO_CHAR(created_at, 'Mon YYYY')) (
γ_label; COUNT(*) → new_users (Customers)
)
)
