【问题标题】:How to combine two separate sql queries into two separate columns?如何将两个单独的 sql 查询组合成两个单独的列?
【发布时间】:2021-02-09 04:49:48
【问题描述】:

我正在处理元数据库中的 SQL 数据库查询。我有两个单独的查询,我希望将它们输出为两个单独的列,按名称排序。执行联合后,它似乎将所有值放入一列中,重复名称。实现两列输出(每个查询一个)的最佳方法是什么?

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

【问题讨论】:

  • Unclear... 显示一个示例 - 单独的查询输出(2-3 行)、获得的和期望的输出。

标签: mysql sql postgresql metabase


【解决方案1】:

而不是 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

【讨论】:

  • 非常感谢,我的下一个问题是创建一个名为“predicted”的新列,它将计数乘以选择加入率?
  • 您的意思是“选择加入率(​​已发送)”* 计数吗?
  • 我已将查询更改为引入“预测”列。
猜你喜欢
  • 2013-04-28
  • 2014-06-08
  • 2015-09-08
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
相关资源
最近更新 更多