Средний чек по каналам привлечения
// Условие
Для каждого канала привлечения (acquisition_channel) посчитайте средний чек завершённых заказов (status = 'completed'). Выведите acquisition_channel и avg_amount, округлив до 2 знаков. Отсортируйте по avg_amount по убыванию.
// Таблицы
sandbox.users
user_id | INT |
registration_date | DATE |
acquisition_channel | VARCHAR(20) |
platform | VARCHAR(10) |
city | VARCHAR(50) |
is_premium | BOOLEAN |
sandbox.orders
order_id | INT |
user_id | INT |
order_date | TIMESTAMP |
amount | NUMERIC(10,2) |
status | VARCHAR(20) |
delivery_days | INT |
promo_code | VARCHAR(20) |
// Что тренирует
JOINGROUP BYAVGROUNDWHERE
// Решение
Подсказка
Нужен 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) нужен, чтобы не выводить длинные дроби.