Pilih Hitungan dari Beberapa Tabel, Grup, dan Persentase Perhitungan

Saat ini saya memiliki kueri yang mengurangi jumlah orang yang ditandai sebagai ikut serta melalui tabel mv_donation_report, dengan jumlah ucapan terima kasih yang disampaikan dalam tabel mv_fundraiser_report seperti yang terlihat di sini:

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

Saat ini saya mengembalikan satu persentase, tetapi saya ingin menghapus parameter WHERE ngo_name, dan mengembalikan beberapa persentase yang dikelompokkan berdasarkan ngo_name/page_name (keduanya memiliki arti dan fungsi yang sama).

Seperti inilah keluaran datanya:

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

Apakah ini mungkin? Bantuan apa pun dihargai, terima kasih!


person Community    schedule 03.06.2020    source sumber


Jawaban (1)


Apakah Anda mencari join dua pertanyaan yang digabungkan berdasarkan nama, seperti itu?

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
Ya! Ini sepertinya yang saya butuhkan, terima kasih! Satu-satunya masalah adalah saya mendapatkan ERROR: column "mv_donation_report.page_name" must appear in the GROUP BY clause or be used in an aggregate function. Adakah pemikiran mengapa hal ini bisa terjadi? - person ; 03.06.2020
comment
@HunterCasillas: maaf, saya lupa klausa group by di kedua subkueri. Tetap. - person GMB; 03.06.2020
comment
Ahh itu sangat masuk akal, terima kasih! Satu hal lagi: Sekarang saya mendapatkan kesalahan ini: ERROR: column "dr.cnt" must appear in the GROUP BY clause or be used in an aggregate function Bagaimana cara mengatasi ini dan tidak perlu mengelompokkan berdasarkan hitungan? - person ; 03.06.2020
comment
@HunterCasillas: diperbaiki. - person GMB; 03.06.2020