практика 'Представления и витрины данных'
This commit is contained in:
@@ -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