如何对相同source_id的帖子点赞行数进行求和统计
解决相同source_id帖子点赞数求和的问题
嘿,这个需求很常见,咱们可以通过表关联+分组聚合轻松实现,我给你两种场景下的SQL方案,你可以根据实际需求选:
方案一:仅统计存在点赞记录的source_id
这种方式只会返回那些至少有一个帖子获得过点赞的source_id及其总点赞数:
SELECT p.source_id, COUNT(l.id) AS total_likes FROM posts p JOIN likes l ON p.id = l.post_id GROUP BY p.source_id;
逻辑拆解:
- 用
JOIN把posts表和likes表通过post_id关联,让每个帖子的点赞记录和帖子本身对应起来 - 用
GROUP BY p.source_id把相同source_id的所有帖子归为一组 - 用
COUNT(l.id)统计每组内的点赞记录总数(选l.id而非*是为了避免关联时的空值干扰,统计更准确)
方案二:统计所有source_id(包括无点赞的)
如果需要把那些没有任何点赞的source_id也列出来,并且显示总点赞数为0,就用左连接(LEFT JOIN):
SELECT p.source_id, COALESCE(COUNT(l.id), 0) AS total_likes FROM posts p LEFT JOIN likes l ON p.id = l.post_id GROUP BY p.source_id;
逻辑补充:
LEFT JOIN会保留posts表中所有的source_id,哪怕对应的帖子没有任何点赞记录COALESCE()函数用来把COUNT()返回的NULL(无点赞时)替换成0,让结果更直观
针对你给出的样本数据的结果
用方案二查询的话,结果会是:
| source_id | total_likes |
|---|---|
| 1 | 5 |
| 3 | 0 |
| 4 | 0 |
内容的提问来源于stack exchange,提问作者melvnberd
相关产品推荐
相关产品推荐

