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

MySQL分组统计:查询用户旗下所有帖子的总评论数

解决方法:计算每个用户收到的总评论数

嘿,这个需求很常见,咱们可以通过关联查询加聚合函数轻松搞定。先理清楚表之间的关联关系:posts的author关联users的username,comments的postId关联posts的postId,核心就是把这些关联串起来,再按用户聚合统计。

方法1:分步统计(更直观)

先统计每个帖子的评论数,再基于这个结果汇总每个用户的总评论数:

第一步:统计单帖评论数

SELECT 
    p.postId, 
    p.author, 
    COUNT(c.commentId) AS comment_count
FROM posts p
LEFT JOIN comments c ON p.postId = c.postId
GROUP BY p.postId, p.author;

这里用LEFT JOIN是为了保留那些没有任何评论的帖子,这类帖子的comment_count会显示为0;如果用INNER JOIN就会直接过滤掉无评论的帖子,不符合统计完整性要求。

第二步:汇总用户总评论数

把上面的查询作为子查询,按author分组求和:

SELECT 
    author, 
    SUM(comment_count) AS total_received_comments
FROM (
    SELECT 
        p.postId, 
        p.author, 
        COUNT(c.commentId) AS comment_count
    FROM posts p
    LEFT JOIN comments c ON p.postId = c.postId
    GROUP BY p.postId, p.author
) AS post_comment_summary
GROUP BY author;

方法2:一步到位(更简洁)

直接通过三次表关联,一次聚合得到结果:

SELECT 
    u.username, 
    COUNT(c.commentId) AS total_received_comments
FROM users u
LEFT JOIN posts p ON u.username = p.author
LEFT JOIN comments c ON p.postId = c.postId
GROUP BY u.username;
  • 这里用LEFT JOIN users是为了包含那些从未发过帖子的用户,他们的total_received_comments会显示为0;如果只需要统计有发帖记录的用户,把第一个LEFT JOIN换成INNER JOIN即可。
  • 注意用COUNT(c.commentId)而不是COUNT(*):因为当帖子无评论时,c.commentId会是NULL,COUNT()会自动忽略NULL值,得到正确的0;而COUNT(*)会把NULL行也算入,导致统计结果错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:06