आपका पहला प्रयास वास्तव में करीब था। लेकिन प्रत्येक post_id
insights
. में मैचों की संख्या से गुणा किया जा रहा था , इसलिए आपको DISTINCT
. का उपयोग करने की आवश्यकता है :
select type_name, count(distinct p.post_id), sum(likes), sum(comments)
from types t
left join posts p on t.type_id = p.post_type
left join insights i on p.post_id = i.post_id
group by type_name;
वैकल्पिक रूप से, आप एक सबक्वेरी के साथ समूह बना सकते हैं जो एक ही पोस्ट के लिए सभी अंतर्दृष्टि को जोड़ती है:
select type_name, count(*), sum(likes), sum(comments)
from types t
left join posts p on t.type_id = p.post_type
left join (select post_id, sum(likes) likes, sum(comments) comments
from insights
group by post_id) i on p.post_id = i.post_id
group by type_name;