Выберите количество из нескольких таблиц, групп и вычислений в процентах

В настоящее время у меня есть запрос, который вычитает количество людей, которые отмечены как подписчики в таблице mv_donation_report, на количество благодарностей, доставленных в таблице mv_fundraiser_report, как показано здесь:

SELECT cast(A.NUM as float)/cast(A.DENOM as float) * 100 AS Percentage
FROM
(SELECT
(SELECT COUNT(*) 
FROM "public"."mv_donation_report"
WHERE "public"."mv_donation_report"."opt_in" = TRUE
[[AND "public"."mv_donation_report"."page_name" = {{NonProfit}}]]
[[AND {{DateRangeDM}}]]) AS NUM,

(SELECT COUNT(*) 
FROM "public"."mv_fundraiser_report" 
WHERE "public"."mv_fundraiser_report"."thank_you_delivered" = TRUE
[[AND "public"."mv_fundraiser_report"."ngo_name" = {{NonProfit}}]]
[[AND {{DateRange}}]]) AS DENOM) A

Прямо сейчас я возвращаю один процент, но я хотел бы удалить параметр WHERE ngo_name и вернуть несколько процентов, сгруппированных по _5 _ / _ 6_ (они оба имеют одинаковое значение и функцию).

Вот как будут выглядеть выходные данные:

ngo_name|percentage
ngo1.   |10
ngo2.   |21
ngo3.   |35
ngo4.   |7

Это возможно? Любая помощь приветствуется, спасибо!


person Community    schedule 03.06.2020    source источник


Ответы (1)


Вы хотите join два запроса, которые объединяются по имени, например?

select dr.name, 1.0 * dr.cnt / fr.cnt as percentage
from ( 
    select page_name as name, count(*) as cnt
    FROM public.mv_donation_report
    where opt_in and {{DateRangeDM}}
    group by page_name
) dr
inner join (
    select ngo_name as name, count(*) as cnt
    FROMpublic.mv_fundraiser_report 
    where thank_you_delivered and {{DateRangeDM}}
    group by ngo_name
) fr on fr.name = dr.name
person GMB    schedule 03.06.2020
comment
Да! Похоже, это именно то, что мне нужно, спасибо! Единственная проблема в том, что я получаю ERROR: column "mv_donation_report.page_name" must appear in the GROUP BY clause or be used in an aggregate function. Есть мысли о том, почему это может быть так? - person ; 03.06.2020
comment
@HunterCasillas: извините, я забыл предложение group by в обоих подзапросах. Фиксированный. - person GMB; 03.06.2020
comment
Ах, это имеет смысл, спасибо! И последнее: теперь я получаю эту ошибку: ERROR: column "dr.cnt" must appear in the GROUP BY clause or be used in an aggregate function Как я могу обойти это и не группировать по счетчику? - person ; 03.06.2020
comment
@HunterCasillas: исправлено. - person GMB; 03.06.2020