连接营销数据表
会话、用户与订单
连接营销数据表 是 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 反馈 — 无需本地设置。