SQL 将单独的查询作为原始查询中的一列加入
Posted
技术标签:
【中文标题】SQL 将单独的查询作为原始查询中的一列加入【英文标题】:SQL joining a separate query as a column in original query 【发布时间】:2021-02-12 05:05:48 【问题描述】:我正在努力加入以下两个查询。
我的主要查询是下面的第一个查询,我想要实现的是查询 2 的 opt in rate 列的输出作为我原始查询中的新列。
SELECT CAST("public"."event_event"."date_created" AS date) AS "date_created", "marketing_message__via__messag"."name" AS "name", count(*) AS "count"
FROM "public"."event_event"
LEFT JOIN "public"."marketing_message" "marketing_message__via__messag" ON "public"."event_event"."message_id" = "marketing_message__via__messag"."id" LEFT JOIN "public"."marketing_campaign" "marketing_campaign__via__campa" ON "public"."event_event"."campaign_id" = "marketing_campaign__via__campa"."id"
WHERE (date_trunc('month', CAST("public"."event_event"."date_created" AS timestamp)) = date_trunc('month', CAST(now() AS timestamp))
AND "marketing_message__via__messag"."name" IS NOT NULL AND ("marketing_message__via__messag"."name" <> ''
OR "marketing_message__via__messag"."name" IS NULL) AND "public"."event_event"."stage" = 'Lead' AND ("marketing_campaign__via__campa"."name" = 'a'
OR "marketing_campaign__via__campa"."name" = 'b'
OR "marketing_campaign__via__campa"."name" = 'c'
OR "marketing_campaign__via__campa"."name" = 'c1' OR "marketing_campaign__via__campa"."name" = 'd'
OR "marketing_campaign__via__campa"."name" = 'e'))
GROUP BY CAST("public"."event_event"."date_created" AS date), "marketing_message__via__messag"."name"
ORDER BY CAST("public"."event_event"."date_created" AS date) ASC, "marketing_message__via__messag"."name" ASC
我想将“选择加入率”的以下查询输出作为新列添加到上面的查询中。
查询 2
SELECT marketing_message.message_text,
cast(sum((event_event.status='Opt-in')::int) as decimal) / nullif(sum((event_event.status='Sent')::int), 0)* 100 as "Opt-in Rate (Sent)"
FROM event_event
JOIN marketing_campaign ON event_event.campaign_id = marketing_campaign.id
JOIN marketing_message ON event_event.message_id = marketing_message.id
WHERE True [[AND campaign_name]] [[AND date_created]]
GROUP BY marketing_message.message_text
【问题讨论】:
【参考方案1】:简短的回答是你不能。
您的第一个查询以日期和名称为关键字(GROUP BY 子句),您的第二个查询以 message_text 为关键字。由于两个数据集之间没有关系,因此无法在单个查询中加入/组合它们。
您需要在两个数据集之间找到一个公共字段(或多个字段)并加入它们 - 但这不会给出与您目前相同的结果,因为您的查询需要完全重组。
【讨论】:
以上是关于SQL 将单独的查询作为原始查询中的一列加入的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个脚本中使用 R 将 SQL 查询中的数据插入到单独的 SQL 查询中?