0Pricing
Digital Marketing Academy · 课时

连接营销数据表

会话、用户与订单

连接营销数据表 是 CoddyKit 上的免费 Digital Marketing Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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 是营销分析中的结构化查询语言发挥作用的地方。花费加收入可以得到 ROAS;会话加订单可以得到归因;用户加订单可以得到按细分群体划分的 LTV。

当两边都必须存在时选择 INNER;当您希望保留并检查缺口时选择 LEFT。

快速检查

您希望列出每一位已注册的用户,包括从未下过订单的用户。应该使用哪种连接?

回顾

INNER JOIN 保留两侧的匹配项;LEFT JOIN 保留左侧的所有行,并显示缺失部分。使用别名和限定列名可以让查询保持整洁。

请注意一对多连接中的扇出陷阱;请预先聚合,以确保总和准确无误。下一步:群组和漏斗查询。

常见问题解答

「连接营销数据表」课时是免费的吗?

是的 — 「连接营销数据表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Digital Marketing Academy 课程的其余内容,请升级到 CoddyKit PRO。 Digital Marketing Academy 课程共包含 4 节课。

「连接营销数据表」这节课中我会学到什么?

会话、用户与订单 你通过在浏览器中直接运行的动手代码来练习 Digital Marketing Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Digital Marketing Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Digital Marketing Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「连接营销数据表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Digital Marketing Academy 课中编写并运行代码吗?

能。每节 Digital Marketing Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么营销人员学习 SQL
  2. SELECT、WHERE、GROUP BY
  3. 连接营销数据表
  4. 队列与漏斗查询
← 返回 Digital Marketing Academy