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
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 гипотезы)?