SQLАгрегация и GROUP BYEasyБесплатно

Категории с высоким средним рейтингом

// Условие

Найдите категории товаров, у которых средний рейтинг отзывов выше 4.0 и при этом есть не менее 100 отзывов. Выведите category, avg_rating (округлить до 2 знаков) и review_count. Отсортируйте по avg_rating по убыванию.

// Таблицы

sandbox.products
product_idINT
product_nameVARCHAR(100)
categoryVARCHAR(30)
priceNUMERIC(10,2)
seller_idINT
sandbox.reviews
review_idINT
user_idINT
product_idINT
ratingINT
review_dateDATE

// Что тренирует

JOINGROUP BYHAVINGAVGCOUNT
▶ Решить в SQL-песочнице

// Решение

Подсказка

JOIN products и reviews. GROUP BY category. Условие на агрегат — это HAVING, а не WHERE.

Сначала попробуй сам → Показать решение
SELECT
  p.category,
  ROUND(AVG(r.rating), 2) AS avg_rating,
  COUNT(*) AS review_count
FROM sandbox.products p
JOIN sandbox.reviews r ON p.product_id = r.product_id
GROUP BY p.category
HAVING AVG(r.rating) > 4.0
   AND COUNT(*) >= 100
ORDER BY avg_rating DESC;

Ключевой момент — HAVING vs WHERE. WHERE фильтрует строки до группировки, HAVING — после. Условия AVG(rating) > 4.0 и COUNT(*) >= 100 применяются к уже сгруппированным данным, поэтому нужен HAVING. Частая ошибка на собесах: писать WHERE COUNT(*) >= 100 — это синтаксическая ошибка.

// Похожие задачи

// Разобраться в теме

→ GROUP BY и HAVING в SQL