0Pricing
Digital Marketing Academy · Урок

Объединение маркетинговых таблиц

Сеансы, пользователи и заказы

«Объединение маркетинговых таблиц» — бесплатный урок Digital Marketing Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Digital Marketing Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Digital Marketing Academy содержит 4 уроков всего.

Зачем нужен JOIN?

Реальные вопросы охватывают несколько таблиц. Расходы хранятся в кампаниях, выручка — в заказах, а характеристики — в данных пользователей. Чтобы вычислить ROAS или LTV по сегментам, необходимо объединить эти данные.

JOIN сопоставляет строки из двух таблиц по общему ключу, например user_id или campaign_id.

SELECT o.order_id, u.country
FROM orders o
JOIN users u ON o.user_id = u.user_id;

INNER JOIN

INNER JOIN возвращает только строки, для которых есть совпадение в обеих таблицах. Заказы без соответствующего пользователя и пользователи без заказов исключаются.

Используйте его, когда вас интересуют только записи, существующие с обеих сторон, например покупатели.

SELECT u.user_id, u.country, SUM(o.revenue) AS revenue
FROM users u
JOIN orders o ON o.user_id = u.user_id
GROUP BY u.user_id, u.country;

LEFT JOIN

LEFT JOIN сохраняет каждую строку из левой таблицы, даже если справа нет совпадения. Отсутствующие значения возвращаются как NULL.

Так можно найти пользователей, которые никогда ничего не заказывали, или сеансы, которые так и не привели к конверсии.

SELECT u.user_id, COALESCE(SUM(o.revenue), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.user_id
GROUP BY u.user_id;

Поиск пропусков

Сочетайте LEFT JOIN с проверкой на NULL, чтобы выделить несовпадения. Вопрос «Какие зарегистрированные пользователи так и не совершили покупку?» — классический вопрос об удержании.

Значение NULL с правой стороны означает, что соответствующего заказа не существовало.

SELECT u.user_id, u.signup_date
FROM users u
LEFT JOIN orders o ON o.user_id = u.user_id
WHERE o.order_id IS NULL;

Соединение сеансов с заказами

Связывание сеансов с заказами соединяет поведение пользователей с результатом. Сопоставьте записи по user_id, чтобы увидеть, какой трафик в итоге привёл к покупкам.

Это основа анализа атрибуции каналов.

SELECT s.channel, SUM(o.revenue) AS revenue
FROM sessions s
JOIN orders o ON o.user_id = s.user_id
GROUP BY s.channel;

Вычисление ROAS

Для расчёта фактического ROAS нужны расходы и выручка рядом друг с другом. Соедините кампании с заказами по campaign_id, а затем разделите итоги.

NULLIF защищает от деления на нулевые расходы.

SELECT c.campaign_id,
       SUM(o.revenue) / NULLIF(SUM(c.spend), 0) AS roas
FROM campaigns c
LEFT JOIN orders o ON o.campaign_id = c.campaign_id
GROUP BY c.campaign_id;

Псевдонимы таблиц

Псевдонимы (o для заказов, u для пользователей) делают запросы с несколькими таблицами короткими и однозначными. Всегда указывайте таблицу перед столбцом, если столбец с таким именем есть в обеих таблицах.

Понятные псевдонимы значительно упрощают чтение и отладку сложных соединений.

SELECT c.name AS campaign, SUM(o.revenue) AS revenue
FROM campaigns c
JOIN orders o ON o.campaign_id = c.campaign_id
GROUP BY c.name;

Соединение трёх таблиц

Цепочка JOIN позволяет объединить более двух таблиц. Здесь мы соединяем кампании с заказами, а затем с пользователями, чтобы распределить выручку по странам.

Каждый JOIN добавляет ещё одно условие ON, связывающее новую таблицу с уже объединённым набором.

SELECT c.name, u.country, SUM(o.revenue) AS revenue
FROM campaigns c
JOIN orders o ON o.campaign_id = c.campaign_id
JOIN users u ON u.user_id = o.user_id
GROUP BY c.name, u.country;

Следите за уровнем детализации

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

Агрегируйте каждую сторону отдельно, а затем соединяйте итоги, чтобы сохранить корректность чисел.

SELECT c.campaign_id, c.total_spend, r.revenue
FROM campaigns c
JOIN (
  SELECT campaign_id, SUM(revenue) AS revenue
  FROM orders GROUP BY campaign_id
) r ON r.campaign_id = c.campaign_id;

Атрибуция по первому касанию

Чтобы засчитать заслугу первому каналу, из которого пришёл пользователь, найдите самый ранний сеанс каждого пользователя, а затем соедините его с заказами.

Подзапрос выделяет первое касание до соединения с данными о выручке.

SELECT f.channel, SUM(o.revenue) AS revenue
FROM (
  SELECT DISTINCT ON (user_id) user_id, channel
  FROM sessions ORDER BY user_id, session_date
) f
JOIN orders o ON o.user_id = f.user_id
GROUP BY f.channel;

JOIN на практике

Именно в JOIN маркетинговый SQL раскрывает свою силу. Расходы плюс выручка дают ROAS, сеансы плюс заказы — атрибуцию, а пользователи плюс заказы — LTV по сегментам.

Выбирайте INNER, когда обе стороны должны существовать, и LEFT, когда нужно сохранить и исследовать пропуски.

Быстрая проверка

Вы хотите вывести каждого зарегистрированного пользователя, включая тех, кто никогда не размещал заказ. Какое соединение вы используете?

Итоги

INNER JOIN сохраняет совпадения с обеих сторон, а LEFT JOIN — все строки слева и показывает пропуски. Псевдонимы и уточнённые имена столбцов делают запросы понятными.

Остерегайтесь размножения строк при соединениях «один ко многим»: предварительно агрегируйте данные, чтобы суммы оставались точными. Далее: запросы для когорт и воронок.

Часто задаваемые вопросы

Урок «Объединение маркетинговых таблиц» бесплатный?

Да — полный текст урока «Объединение маркетинговых таблиц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Digital Marketing Academy, подпишись на CoddyKit PRO. Курс Digital Marketing Academy содержит 4 уроков всего.

Чему я научусь в уроке «Объединение маркетинговых таблиц»?

Сеансы, пользователи и заказы Ты практикуешь Digital Marketing Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Digital Marketing Academy?

Предыдущий опыт не требуется. Digital Marketing Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Объединение маркетинговых таблиц»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Digital Marketing Academy?

Да. Каждый урок Digital Marketing Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем маркетологам изучать SQL
  2. SELECT, WHERE, GROUP BY
  3. Объединение маркетинговых таблиц
  4. Запросы по когортам и воронкам
← Назад к Digital Marketing Academy