homework, pet project DE Dmitry_Medvedev #1
@@ -0,0 +1,66 @@
|
||||
-- Задание 1
|
||||
CREATE MATERIALIZED VIEW mv_category_revenue AS
|
||||
SELECT
|
||||
p.category,
|
||||
sum(oi.quantity * oi.price_at_purchase) AS total_revenue
|
||||
FROM
|
||||
mnoskov.products p
|
||||
JOIN
|
||||
mnoskov.order_items oi ON p.id = oi.product_id
|
||||
JOIN
|
||||
mnoskov.orders o ON oi.order_id = o.id
|
||||
WHERE o.status = 'paid'
|
||||
GROUP BY
|
||||
p.category
|
||||
ORDER BY
|
||||
total_revenue desc;
|
||||
-- удобнее иметь wiev, чтобы небыло дублирования кода, и чтобы легко обращаться к запросу не переписывая все заново
|
||||
|
||||
|
||||
-- Задание 2
|
||||
CREATE MATERIALIZED VIEW mv_user_activity AS
|
||||
SELECT
|
||||
u.id AS user_id,
|
||||
u.name AS user_name,
|
||||
count(*) AS orders_count
|
||||
FROM
|
||||
mnoskov.users u
|
||||
JOIN
|
||||
mnoskov.orders o ON u.id = o.user_id
|
||||
WHERE
|
||||
o.status = 'paid'
|
||||
GROUP BY
|
||||
u.id, u.name
|
||||
HAVING
|
||||
count(*) > 0
|
||||
ORDER BY
|
||||
orders_count desc;
|
||||
-- Чем больше у пользователя заказов тем он более 'лояльный'
|
||||
-- Тогда будет отображаться статистика только за последний месяц - 30 дней
|
||||
|
||||
|
||||
-- Задание 3
|
||||
CREATE MATERIALIZED VIEW mv_daily_revenue AS
|
||||
SELECT
|
||||
o.order_date::date AS sales_date,
|
||||
sum(oi.quantity * oi.price_at_purchase) AS daily_revenue
|
||||
FROM
|
||||
mnoskov.orders o
|
||||
JOIN
|
||||
mnoskov.order_items oi ON o.id = oi.order_id
|
||||
WHERE
|
||||
o.status = 'paid'
|
||||
GROUP BY
|
||||
o.order_date
|
||||
ORDER BY
|
||||
sales_date;
|
||||
-- Можно построить график, и видеть пики с просадками
|
||||
-- Быстрее считать выручку из mv_daily_revenue, тк витрина уже готова, и её не нужно высчитывать
|
||||
|
||||
|
||||
-- Задание 4
|
||||
REFRESH MATERIALIZED VIEW mv_daily_revenue;
|
||||
-- 1. интернет‑магазин с несколькими заказами в день - каждые сутки в 8 утра например
|
||||
-- 2. крупный магазин с тысячами заказов в час - каждые 30 минут
|
||||
-- Слишком редкий REFRESH сделает витрину бесполезной для аналитиков
|
||||
-- Обновлять каждую секунжу нельзя, тк это тратит ресурсы компьютера, и тогда уж проще просто VIEW сделать, и вызывать когда надо
|
||||
Reference in New Issue
Block a user