TGViewer
Level Up в аналитике Level Up в аналитике @levelup_analytics · 97 subscribers
Post #83 20
После JOIN выручка выросла, хотя продаж больше не стало

Иногда для роста выручки достаточно добавить в запрос один JOIN. Правда, растёт она только в отчёте.
Допустим, покупатель оформил заказ суммарно на 1 000 рублей. Внутри заказа три товара: футболка, носки и кепка.
В таблице заказов этому заказу соответствует одна строка с общей суммой. В таблице товаров заказа три строки, по одной на каждую позицию.

Соединяем таблицы по номеру заказа, чтобы добавить названия товаров. Получаем три строки. И в каждой из них повторяется сумма всего заказа:
- футболка — сумма заказа 1 000 ₽;
- носки — сумма заказа 1 000 ₽;
- кепка — сумма заказа 1 000 ₽.

Теперь считаем SUM(order_total) и получаем 3 000 рублей. Покупатель заплатил тысячу, а отчёт уже перевыполнил план.
На одном заказе всё очевидно. В запросе с несколькими таблицами такую историю заметить сложнее. Особенно если сумма выросла на несколько процентов и выглядит вполне правдоподобно.

SQL при этом не выдаст ошибку. Для каждого товара он нашёл соответствующий заказ и подставил его данные. Всё по инструкции.

Изменилось то, что означает одна строка.
До соединения одна строка была одним заказом. После джойна одной товарной позицией. А складывать мы продолжаем суммы заказов, которые теперь повторяются.

Исправление зависит от задачи.
Если нужна общая выручка по заказам, её можно посчитать прямо в таблице заказов. Если нужны ещё и сведения о товарах, например, количество позиций, сначала собрать их до одной строки на заказ, а затем присоединить.
Для выручки по товарам нужно брать стоимость самих позиций с учётом количества и скидок. Сумму всего заказа к каждому товару приписывать нельзя.

И здесь легко попасть во вторую ловушку: написать SUM(DISTINCT order_total). На одном заказе поможет. Но два разных заказа по тысяче рублей превратятся в одну тысячу: DISTINCT различает значения суммы, а не заказы.

Поэтому после соединения полезно проверить три вещи:
- сколько стало строк и ожидали ли мы такое количество;
- сколько осталось уникальных заказов;
- что произошло с контрольной суммой на том же наборе заказов.

Я, очень часто, смотрю промежуточные таблицы глазами, перед тем как приджойнивать их. Это помогает не допускать подобных ошибок.

А у вас бывало, что после JOIN цифры вдруг становились подозрительно хорошими?
  • 👍 2
  • ❤ 1
More from @levelup_analytics
  1. Sep 17, 2026Сто решённых задач могут не сдвинуть тебя с места Поймал себя на знакомой ловушке. Открыва…
  2. Sep 15, 2026Конверсия 3%. Можно ли ей верить? Недавно по работе мне понадобилось рассчитать минимальну…
  3. Sep 8, 2026Я тут пропал на пару недель, но виной тому не только работа. Долго думал как улучшить и си…
  4. Aug 26, 2026В продуктовом кейсе финальная гипотеза это только часть ответа. Во многих командах интервь…
  5. Aug 26, 2026photo post
  6. Aug 18, 2026Собирательный учебный кейс, не история конкретного менти. Ситуация составлена из типичных…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →