работа над ошибками по Создание таблиц, JOIN, UNION, Агреции и группировки, Функции, CTE.
This commit is contained in:
@@ -26,7 +26,7 @@ WHERE NOT EXISTS (
|
||||
WHERE
|
||||
u.id = o.user_id
|
||||
)
|
||||
-- Работает быстрее чем NOT IN
|
||||
-- NOT EXISTS безопаснее в плане NULL, и часто планируется лучше чем NOT IN
|
||||
-- Определить какое количество людей не делают заказы, и кинуть им например купон на скидку на первый заказ
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ ORDER BY
|
||||
|
||||
|
||||
-- Задание 4
|
||||
WITH revenue_by_user AS (
|
||||
WITH revenue_user AS (
|
||||
SELECT
|
||||
o.user_id,
|
||||
sum(oi.quantity * oi.price_at_purchase) AS total_revenue
|
||||
@@ -63,19 +63,19 @@ WITH revenue_by_user AS (
|
||||
)
|
||||
SELECT
|
||||
u.name,
|
||||
rbu.total_revenue
|
||||
ru.total_revenue
|
||||
FROM
|
||||
mnoskov.users u
|
||||
JOIN
|
||||
revenue_by_user rbu ON u.id = rbu.user_id
|
||||
revenue_user ru ON u.id = ru.user_id
|
||||
ORDER BY
|
||||
rbu.total_revenue desc;
|
||||
ru.total_revenue desc;
|
||||
-- Проще читать когда шаг «посчитать выручку по пользователям» вынесен отдельно
|
||||
-- Чтобы избежать дублирования импользуется CTE, а не простой подзапрос
|
||||
|
||||
|
||||
-- Задание 5
|
||||
WITH revenue_by_product AS (
|
||||
WITH revenue_product AS (
|
||||
SELECT
|
||||
product_id,
|
||||
sum(quantity * price_at_purchase) AS product_revenue
|
||||
@@ -87,13 +87,13 @@ WITH revenue_by_product AS (
|
||||
SELECT
|
||||
p.name,
|
||||
p.category,
|
||||
rbp.product_revenue
|
||||
rp.product_revenue
|
||||
FROM
|
||||
mnoskov.products p
|
||||
JOIN
|
||||
revenue_by_product rbp ON p.id = rbp.product_id
|
||||
revenue_product rp ON p.id = rp.product_id
|
||||
ORDER BY
|
||||
rbp.product_revenue
|
||||
rp.product_revenue
|
||||
LIMIT 3;
|
||||
-- Сначала удобнее считать агрегаты, чтобы код не выгляжел грооздким и чтобы в нем было легче разобраться
|
||||
-- Отличае в удобстве чтения и написания. И этот агрегат можно потом ещё и переиспользовать
|
||||
|
||||
Reference in New Issue
Block a user