SQLПодзапросы и CTEMediumБесплатно

Пользователи с тратами выше среднего

// Условие

Найдите пользователей, чья суммарная сумма завершённых заказов превышает среднюю суммарную сумму по всем пользователям (у которых есть завершённые заказы). Выведите user_id и total_spent. Отсортируйте по total_spent по убыванию. Первые 10.

// Таблицы

sandbox.orders
order_idINT
user_idINT
order_dateTIMESTAMP
amountNUMERIC(10,2)
statusVARCHAR(20)
delivery_daysINT
promo_codeVARCHAR(20)

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

CTEПодзапросAVGSUM
▶ Решить в SQL-песочнице

// Решение

Подсказка

Подзапрос: сначала посчитайте total_spent для каждого пользователя, затем сравните со средним через подзапрос или CTE.

Сначала попробуй сам → Показать решение
WITH user_totals AS (
  SELECT
    user_id,
    SUM(amount) AS total_spent
  FROM sandbox.orders
  WHERE status = 'completed'
  GROUP BY user_id
)
SELECT
  user_id,
  total_spent
FROM user_totals
WHERE total_spent > (SELECT AVG(total_spent) FROM user_totals)
ORDER BY total_spent DESC
LIMIT 10;

Двухуровневая логика: сначала считаем total_spent на пользователя (CTE), потом фильтруем тех, у кого total_spent выше среднего. Подзапрос в WHERE берёт AVG из той же CTE. Альтернатива — без CTE, с вложенным подзапросом в FROM, но CTE читаемее.

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

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

→ CTE против подзапросов