Mysql
 sql >> Database >  >> RDS >> Mysql

Somma MySQL, conteggio con raggruppamento e join

Il tuo primo tentativo è stato molto vicino. Ma ogni post_id è stato moltiplicato per il numero di corrispondenze in insights , quindi devi usare 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;

In alternativa, puoi raggruppare con una sottoquery che combina tutti gli approfondimenti per lo stesso post:

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;

FIDDLE