✅ Решения: HAVING
⚡ Кратко
- Фильтр групп —
HAVING COUNT(*) > .... - Совмещайте
WHEREиHAVINGдля точной выборки. - Сортировка по агрегату помогает быстро увидеть топ групп.
Решение 1. Поставщики с более чем двумя продуктами
SELECT supplier_ids, COUNT(id) AS product_count
FROM products
GROUP BY supplier_ids
HAVING COUNT(id) > 2
ORDER BY product_count DESC;
Группируем по supplier_ids и отбираем группы, где количество продуктов больше двух.
Решение 2. Популярные комбинации цен
SELECT standard_cost, list_price, COUNT(product_name) AS product_count
FROM products
GROUP BY standard_cost, list_price
HAVING COUNT(product_name) > 1
ORDER BY product_count DESC, standard_cost;
Группировка по двум столбцам и фильтр групп с более чем одним продуктом.
Решение 3. Упаковка в унциях
SELECT standard_cost, COUNT(product_name) AS product_count
FROM products
WHERE LOWER(quantity_per_unit) LIKE '%oz%'
GROUP BY standard_cost
HAVING COUNT(product_name) > 2
ORDER BY product_count DESC;
WHERE отбирает строки с подстрокой 'oz', HAVING — группы из трёх и более строк.
Решение 4. Заказы с большим количеством товаров
SELECT order_id, SUM(quantity) AS total_quantity
FROM order_details
GROUP BY order_id
HAVING SUM(quantity) > 50
ORDER BY total_quantity DESC;
Суммируем количество товаров по заказам и оставляем только те, где итог больше 50.
Решение 5. Категории с высоким разбросом цен
SELECT category_id,
COUNT(id) AS product_count,
MIN(list_price) AS min_price,
MAX(list_price) AS max_price,
MAX(list_price) - MIN(list_price) AS price_range
FROM products
GROUP BY category_id
HAVING MAX(list_price) - MIN(list_price) > 100
ORDER BY price_range DESC;
Вычисляем разброс цен в каждой категории и фильтруем группы с разбросом более 100. В HAVING используем полное выражение, а не алиас, чтобы запрос работал в любой СУБД.