Nỗ lực đầu tiên của bạn đã thực sự thành công. Nhưng mỗi post_id
được nhân với số lượng kết quả phù hợp trong insights
, vì vậy bạn cần sử dụng 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;
Ngoài ra, bạn có thể nhóm với một truy vấn con kết hợp tất cả thông tin chi tiết cho cùng một bài đăng:
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;