made changes to the agregations

This commit is contained in:
Dmitry Medvedev
2026-06-04 12:06:54 +05:00
parent 63e7eab734
commit 06f296f347
+9 -8
View File
@@ -4,7 +4,7 @@ SELECT p.category, COUNT (*) AS products_count
FROM products p FROM products p
GROUP BY category GROUP BY category
ORDER BY products_count DESC ORDER BY products_count DESC;
/*Что будет, если убрать ORDER BY — как изменится чтение результата для продукта/аналитика? /*Что будет, если убрать ORDER BY — как изменится чтение результата для продукта/аналитика?
Аналитик может пропустить товар с самым большим значением или с самым малым Аналитик может пропустить товар с самым большим значением или с самым малым
@@ -20,7 +20,7 @@ SELECT order_id, SUM(quantity) AS total_quantity, SUM(quantity * price_at_purcha
FROM order_items oi FROM order_items oi
GROUP BY order_id GROUP BY order_id
ORDER BY order_revenue DESC ORDER BY order_revenue DESC;
/*Что будет, если убрать GROUP BY и оставить SUM(quantity * price_at_purchase)? /*Что будет, если убрать GROUP BY и оставить SUM(quantity * price_at_purchase)?
Будет ошибка, так как order_id нигде не задействовано Будет ошибка, так как order_id нигде не задействовано
@@ -35,7 +35,7 @@ SELECT category, SUM (oi.quantity * oi.price_at_purchase) AS category_revenue
FROM order_items oi FROM order_items oi
JOIN products p ON oi.product_id = p.id JOIN products p ON oi.product_id = p.id
GROUP BY p.category GROUP BY p.category
ORDER BY category_revenue DESC ORDER BY category_revenue DESC;
/*Почему группировка идёт по p.category, а не по p.id? /*Почему группировка идёт по 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 FROM order_items oi
JOIN orders o ON oi.order_id = o.id JOIN orders o ON oi.order_id = o.id
WHERE status = 'paid' WHERE status = 'paid'
ORDER BY order_revenue DESC ORDER BY order_revenue DESC;
/* /*
Чем результат этой задачи будет отличаться от задачи 2 (где статус не учитывался)? Чем результат этой задачи будет отличаться от задачи 2 (где статус не учитывался)?
@@ -66,7 +66,8 @@ SELECT category, SUM (oi.quantity * oi.price_at_purchase) AS category_revenue
FROM order_items oi FROM order_items oi
JOIN products p ON oi.product_id = p.id JOIN products p ON oi.product_id = p.id
GROUP BY p.category 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 category_revenue > 1000?
Потому что where фильтрует только строки, а не группы Потому что where фильтрует только строки, а не группы
@@ -84,7 +85,7 @@ FROM users u
WHERE is_active IS TRUE WHERE is_active IS TRUE
GROUP BY country GROUP BY country
HAVING COUNT(*) >= 2 HAVING COUNT(*) >= 2
ORDER BY active_users_count DESC ORDER BY active_users_count DESC;
/* /*
Почему фильтр по активности (is_active = true) логичнее писать в WHERE, а не в HAVING? Почему фильтр по активности (is_active = true) логичнее писать в WHERE, а не в HAVING?
@@ -101,7 +102,7 @@ FROM order_items oi
JOIN products p ON oi.product_id = p.id JOIN products p ON oi.product_id = p.id
GROUP BY product_name GROUP BY product_name
ORDER BY SUM(quantity) DESC ORDER BY SUM(quantity) DESC
LIMIT 3 LIMIT 3;
/* /*
Чем рейтинг по total_quantity_sold отличается от рейтинга по выручке (SUM(quantity * price_at_purchase))? Чем рейтинг по 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 FROM order_items oi
GROUP BY order_id GROUP BY order_id
HAVING SUM(quantity * price_at_purchase) < 100 HAVING SUM(quantity * price_at_purchase) < 100
ORDER BY SUM(quantity * price_at_purchase) ORDER BY SUM(quantity * price_at_purchase);
/* /*
Какие реальные причины могут быть у очень маленьких заказов (1–2 гипотезы)? Какие реальные причины могут быть у очень маленьких заказов (1–2 гипотезы)?