mysql - 左连接 SQL 表
问题描述
使用以下表格:
- 用户(user_id)
- 购买 (user_id, event_datetime = 购买日期)
- email_sent (user_id, message_id
- email_open (user_id, message_id)
- email_click (user_id, message_id)
我正在尝试获得这样的表格:
但正如你所看到的数字是错误的(连接似乎很糟糕)。
我应该:
email sent> email opened > email clicked
(因为它是在发送的电子邮件中打开的电子邮件,点击相同)
我不知道我的 JOIN/LEFT JOIN 做错了什么。
这是我的查询(查询结果如上表):
WITH user AS (
SELECT
DISTINCT user_id
,CASE WHEN DATE_DIFF('day',DATE(MAX(event_datetime)), NOW()) < 30
THEN 'buyer_30d'
ELSE 'not_buyer_30d' END AS user_type
FROM [orion_sandbox]."[Domain]_purchase"
GROUP BY user_id
),email_sent AS
(
SELECT
u.user_id
,es.message_id
FROM [orion_sandbox]."[Domain]_user" AS u
JOIN [orion_sandbox]."[Domain]_purchase" AS p USING(user_id)
JOIN [orion_sandbox]."[Domain]_email_sent" AS es ON u.user_id =es.user_id
WHERE DATE_DIFF('day',DATE(es.event_datetime), NOW())<60 AND DATE_DIFF('day',DATE(es.event_datetime), NOW()) >30
)
SELECT user_type,
COUNT(es.message_id) AS email_received,
COUNT(eo.message_id) AS email_opened,
COUNT(ec.message_id) AS email_clicked
FROM user
JOIN email_sent AS es ON user.user_id=es.user_id
LEFT JOIN [orion_sandbox]."[Domain]_email_open" AS eo ON eo.message_id=es.message_id AND eo.user_id=es.user_id
LEFT JOIN [orion_sandbox]."[Domain]_email_click" AS ec ON ec.message_id=eo.message_id AND ec.user_id=eo.user_id
GROUP BY user_type
解决方案
推荐阅读
- postgresql - 使用 PostgreSQL 根据 UTC 列值查找昨天和今天之间的记录时遇到问题
- vulkan - Vulkan 的描述符集布局和 `VkWriteDescriptorInfo` 有什么区别?
- java - Lucee 升级问题 - 版本 5.2.9 到 5.3.8
- reactjs - 处理提交上的 React-Hook-Form 和 preventDefault
- pine-script - 多个时间框架上的几个 EMA 的 Pine 脚本
- react-native - 如何将模态附加到根元素?
- laravel-5 - 创建pdf文件ContentOperationNotPermittedError时laravel-snappy错误
- javascript - 如何在 Jest 中设置范围模拟?
- openstreetmap - 当前 osmnames.org 背后的数据是使用最新的 OSM 数据和 github.com/OSMNames/OSMNames 中的最新代码构建的吗?
- python - 有没有更好的方法在python中实现数组