如果相同的源ID,如何对计数的行进行求和

时间:2018-04-12 22:26:01

标签: mysql sql

美好的一天,

我正在创建一个用户可以共享帖子的功能,其他用户可能会喜欢或评论"在它.. ..

现在在我的POST桌子上我有#34; id"和" source_id" +其他详细信息,以跟踪喜欢帖子的人我创建了一个专门用于详细信息的表格。列:ID,USER_ID(喜欢帖子的使用ID),post_id

帖子表:

id | source_id | caption
1        1       original post
2        1       share from id: 1 posts
3        3       new posts
4        4       new posts

喜欢桌子:

id | post_id | user_id
1       1        2
2       1        10
3       2        11
4       2        4
5       2        20
6       3        11
7       4        19
8       4        10

为了计算帖子的喜欢数量,我做

SELECT  a.id, a.source_id,b.num_likes 
FROM posts AS a 
LEFT JOIN (SELECT COUNT(user_id) AS 
         num_likes,post_id 
             FROM post_likes GROUP BY post_id ) AS b 
ON b.post_id= a.id
WHERE b.num_likes != 0

结果:

id | source_id | num_likes
1        1          2          <--- original post
2        1          3          <--- shared post who also got likes
3        3          1           
4        4          2

我想要实现的就像这些

id | source_id   | num_likes
1         1           5              
3         3           1
4         4           2

这可以通过查询来实现吗?如果是的话,请你帮助我实现这个目标..

非常感谢!

2 个答案:

答案 0 :(得分:2)

您可以直接加入表格。

SELECT MIN(a.id), a.source_id, COUNT(b.num_likes) FROM posts AS a 
LEFT JOIN post_likes AS b ON b.post_id= a.id
GROUP BY a.source_id
HAVING b.num_likes > 0

可能需要为a.id使用MIN,因为它没有聚合。这取决于您的数据和用例。

答案 1 :(得分:0)

使用SUM函数获得总喜欢。

SELECT  min(a.id) as id, a.source_id,sum(b.num_likes) as num_likes 
FROM posts AS a 
LEFT JOIN (SELECT count(1) AS 
         num_likes,post_id 
            FROM post_likes GROUP BY post_id ) AS b 
ON b.post_id= a.id
WHERE b.num_likes != 0
GROUP BY a.source_id