如何解决如何将两个单独的 sql 查询合并到两个单独的列中?
我正在元数据库中处理 SQL 数据库查询。我有两个单独的查询,我希望将它们输出为两个单独的列,按名称排序。执行 union 后,它似乎将所有值都放入复制名称的一列中。实现两列输出(每个查询一个)的最佳方法是什么?
SELECT "source"."name" AS "name","source"."count" AS "count"
FROM (SELECT "source"."count" AS "count","source"."name" AS "name","source"."count" AS "count_2",("source"."count" * 1.5) AS "a" FROM (SELECT "marketing_campaign__via__campa"."name" AS "name",count(*) AS "count" FROM "public"."event_event"
LEFT JOIN "public"."event_event" "Event Event - Source Event" ON "public"."event_event"."source_event_id" = "Event Event - Source Event"."id" LEFT JOIN "public"."marketing_campaign" "marketing_campaign__via__campa" ON "public"."event_event"."campaign_id" = "marketing_campaign__via__campa"."id"
WHERE "public"."event_event"."status" = 'Queued'
GROUP BY "marketing_campaign__via__campa"."name"
ORDER BY "marketing_campaign__via__campa"."name" ASC) "source") "source"
union all
SELECT marketing_campaign.name,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
WHERE marketing_campaign.is_archived=false [[AND {{date_created}}]]
GROUP BY marketing_campaign.name
LIMIT 1048576
解决方法
而不是 union all 您需要在 name 列上加入两个表,然后从两个表中分别选择第二列。我正在考虑名称列与两个表相同的事实。如果某个表中存在任何名称而另一表中不存在,则不会在结果中显示
select t1.name,t1.count,t2."Opt-in Rate (Sent)",t1.count*t2."Opt-in Rate (Sent)" as predicted
from (
SELECT "source"."name" AS "name","source"."count" AS "count"
FROM (SELECT "source"."count" AS "count","source"."name" AS "name","source"."count" AS "count_2",("source"."count" * 1.5) AS "a" FROM (SELECT "marketing_campaign__via__campa"."name" AS "name",count(*) AS "count" FROM "public"."event_event"
LEFT JOIN "public"."event_event" "Event Event - Source Event" ON "public"."event_event"."source_event_id" = "Event Event - Source Event"."id" LEFT JOIN "public"."marketing_campaign" "marketing_campaign__via__campa" ON "public"."event_event"."campaign_id" = "marketing_campaign__via__campa"."id"
WHERE "public"."event_event"."status" = 'Queued'
GROUP BY "marketing_campaign__via__campa"."name"
ORDER BY "marketing_campaign__via__campa"."name" ASC) "source") "source") t1 inner join
(
SELECT marketing_campaign.name,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
WHERE marketing_campaign.is_archived=false [[AND {{date_created}}]]
GROUP BY marketing_campaign.name
)t2 on t1.name=t2.name
LIMIT 1048576
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。