เลือกนับจากหลายตาราง จัดกลุ่ม และคำนวณเปอร์เซ็นต์

ขณะนี้ฉันมีคำถามที่ลบจำนวนผู้ที่ทำเครื่องหมายว่าเข้าร่วมผ่านตาราง 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 และส่งกลับเปอร์เซ็นต์หลายกลุ่มที่จัดกลุ่มตาม ngo_name/page_name (ทั้งคู่มีความหมายและฟังก์ชันเหมือนกัน)

นี่คือลักษณะที่เอาต์พุตข้อมูลจะมีลักษณะดังนี้:

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