Вступить в клуб →
сложнаявопросSQL для аналитики

После присоединения позиций заказа выручка в отчёте выросла вдвое

Отчёт по выручке в разрезе каналов сходился с финансовыми данными. Затем понадобилось добавить разрез по категориям товаров, и в запрос добавили позиции заказа:

SELECT o.channel, SUM(o.amount) AS revenue
FROM orders o
JOIN order_items i ON i.order_id = o.order_id
GROUP BY o.channel;

Выручка выросла примерно вдвое, хотя данные не менялись. Что произошло?

  • Соединение один-ко-многим размножило строки, и amount сложился по числу позиций
  • SUM после GROUP BY завышает результат при соединениях, нужно писать SUM(DISTINCT o.amount)
  • Соединение отбросило заказы без позиций, из-за чего итоговая сумма в отчёте изменилась
  • Нужно заменить JOIN на LEFT JOIN — тогда сумма вернётся к прежнему значению

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела