diff --git a/dmedvedev/agregation.sql b/dmedvedev/agregation.sql index 7e83f4d..4c3f633 100644 --- a/dmedvedev/agregation.sql +++ b/dmedvedev/agregation.sql @@ -4,7 +4,7 @@ SELECT p.category, COUNT (*) AS products_count FROM products p GROUP BY category -ORDER BY products_count DESC +ORDER BY products_count DESC; /*Что будет, если убрать ORDER BY — как изменится чтение результата для продукта/аналитика? Аналитик может пропустить товар с самым большим значением или с самым малым @@ -20,7 +20,7 @@ SELECT order_id, SUM(quantity) AS total_quantity, SUM(quantity * price_at_purcha FROM order_items oi GROUP BY order_id -ORDER BY order_revenue DESC +ORDER BY order_revenue DESC; /*Что будет, если убрать GROUP BY и оставить SUM(quantity * price_at_purchase)? Будет ошибка, так как order_id нигде не задействовано @@ -35,7 +35,7 @@ SELECT category, SUM (oi.quantity * oi.price_at_purchase) AS category_revenue FROM order_items oi JOIN products p ON oi.product_id = p.id GROUP BY p.category -ORDER BY category_revenue DESC +ORDER BY category_revenue DESC; /*Почему группировка идёт по p.category, а не по p.id? Задача была группировать по категориям, поэтому так. Если бы задача была группировать по айдишникам продуктов, то да, делали бы так. @@ -50,7 +50,7 @@ SELECT COUNT(order_id), SUM (oi.quantity * oi.price_at_purchase) AS order_revenu FROM order_items oi JOIN orders o ON oi.order_id = o.id WHERE status = 'paid' -ORDER BY order_revenue DESC +ORDER BY order_revenue DESC; /* Чем результат этой задачи будет отличаться от задачи 2 (где статус не учитывался)? @@ -66,7 +66,8 @@ SELECT category, SUM (oi.quantity * oi.price_at_purchase) AS category_revenue FROM order_items oi JOIN products p ON oi.product_id = p.id GROUP BY p.category -ORDER BY category_revenue DESC +HAVING SUM (oi.quantity * oi.price_at_purchase) > 1000 +ORDER BY category_revenue DESC; /* Почему нельзя написать WHERE category_revenue > 1000? Потому что where фильтрует только строки, а не группы @@ -84,7 +85,7 @@ FROM users u WHERE is_active IS TRUE GROUP BY country HAVING COUNT(*) >= 2 -ORDER BY active_users_count DESC +ORDER BY active_users_count DESC; /* Почему фильтр по активности (is_active = true) логичнее писать в WHERE, а не в HAVING? @@ -101,7 +102,7 @@ FROM order_items oi JOIN products p ON oi.product_id = p.id GROUP BY product_name ORDER BY SUM(quantity) DESC -LIMIT 3 +LIMIT 3; /* Чем рейтинг по total_quantity_sold отличается от рейтинга по выручке (SUM(quantity * price_at_purchase))? @@ -119,7 +120,7 @@ SELECT order_id, SUM(quantity * price_at_purchase) AS order_revenue FROM order_items oi GROUP BY order_id HAVING SUM(quantity * price_at_purchase) < 100 -ORDER BY SUM(quantity * price_at_purchase) +ORDER BY SUM(quantity * price_at_purchase); /* Какие реальные причины могут быть у очень маленьких заказов (1–2 гипотезы)?