#mysql #sql #postgresql #metabase
#mysql #sql #postgresql #метабаза
Вопрос:
Я работаю над запросом базы данных 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
Комментарии:
1. Неясно… Покажите пример — отдельные выходные данные запросов (2-3 строки), полученные и желаемые выходные данные.
Ответ №1:
Вместо объединения вам нужно объединить обе таблицы в столбце 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
Комментарии:
1. Большое спасибо, моим следующим вопросом будет создание нового столбца с именем «прогнозируемый», который умножает количество на скорость регистрации?
2. Вы имеете в виду «Количество подписчиков (отправленных)» * count?
3. Я изменил свой запрос на введенные «прогнозируемые» столбцы.