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

Средний чек по каналам привлечения

// Условие

Для каждого канала привлечения (acquisition_channel) посчитайте средний чек завершённых заказов (status = 'completed'). Выведите acquisition_channel и avg_amount, округлив до 2 знаков. Отсортируйте по avg_amount по убыванию.

// Таблицы

sandbox.users
user_idINT
registration_dateDATE
acquisition_channelVARCHAR(20)
platformVARCHAR(10)
cityVARCHAR(50)
is_premiumBOOLEAN
sandbox.orders
order_idINT
user_idINT
order_dateTIMESTAMP
amountNUMERIC(10,2)
statusVARCHAR(20)
delivery_daysINT
promo_codeVARCHAR(20)

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

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

// Решение

Подсказка

Нужен JOIN users и orders. Фильтр WHERE status = 'completed'. ROUND(AVG(amount), 2).

Сначала попробуй сам → Показать решение
SELECT
  u.acquisition_channel,
  ROUND(AVG(o.amount), 2) AS avg_amount
FROM sandbox.users u
JOIN sandbox.orders o ON u.user_id = o.user_id
WHERE o.status = 'completed'
GROUP BY u.acquisition_channel
ORDER BY avg_amount DESC;

Здесь уже нужен JOIN — канал привлечения лежит в users, а заказы — в orders. Важно: фильтр status = 'completed' стоит в WHERE, а не в HAVING, потому что мы фильтруем строки до группировки. ROUND(..., 2) нужен, чтобы не выводить длинные дроби.

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

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

→ GROUP BY и HAVING в SQL