You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计各帖子评论数(包含评论数为0的情况)

解决帖子评论数统计(含0评论情况)

嘿,我来帮你搞定这个问题~你现在的查询只返回有评论的帖子,核心原因是你从comments表入手的——没有评论的帖子根本不会出现在这个表里,自然查不到。要拿到评论数为0的结果,得换个思路,从posts表出发才行!

方案1:左连接(LEFT JOIN)实现

这是最常用的方式,通过左连接确保所有目标帖子都被包含,即使没有评论:

SELECT posts.id, COUNT(comments.id) AS comment_count
FROM posts
LEFT JOIN comments ON comments.post_id = posts.id
WHERE posts.id IN (1, 2, 3, 4, 5)
GROUP BY posts.id
ORDER BY posts.created_at DESC, posts.id DESC;

关键细节解释:

  • 从posts表开始:确保你要统计的1-5号帖子都被纳入结果集,不管有没有评论。
  • LEFT JOIN comments:保留posts的所有记录,匹配comments中对应post_id的评论;如果没有评论,comments的字段会是NULL。
  • COUNT(comments.id):COUNT()会忽略NULL值,所以没有评论的帖子会得到0;如果用COUNT(*)的话,会把NULL的行也算进去,得到错误的1,一定要注意!
  • GROUP BY posts.id:按帖子ID分组,统计每个帖子的评论数。
  • 排序逻辑:用posts.created_at排序更合理,因为没有评论的帖子没有comments.created_at,用帖子自身的创建时间排序符合常规需求。

方案2:相关子查询实现

如果你更习惯子查询的写法,也可以用这种方式,逻辑更直观:

SELECT 
    posts.id,
    (SELECT COUNT(id) FROM comments WHERE comments.post_id = posts.id) AS comment_count
FROM posts
WHERE posts.id IN (1, 2, 3, 4, 5)
ORDER BY posts.created_at DESC, posts.id DESC;

这个语句会对每个帖子单独查询对应的评论数,没有评论时子查询返回0,同样能满足需求。

原查询的问题分析

你原来的语句有两个核心问题:

  1. 数据源选错了:从comments表出发,天然排除了没有评论的帖子。
  2. GROUP BY字段错误:你写的GROUP BY id是按评论ID分组,这完全不符合统计需求——应该按post_id分组,但即使改了,还是解决不了无评论帖子的问题,因为数据源还是comments表。

内容的提问来源于stack exchange,提问作者Cannon431

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:05:09