MySQL:同一个 LEFT JOIN 表中的多个计数不起作用

标签 mysql left-join

我有这 3 个表:

1. posts (num, title, createdDate)
2. comments (num, post_num, parent_comment)
3. likes (comment_num)

我正在尝试查询以获得以下结果:

1. all posts
2. comments count including replies
3. replies count only (comments.parent_comment != 0)
4. total likes count
5. total participants in a post

到目前为止,除了#3,我对所有事情都很好,即只回复计数 (comments.parent_comment != 0)

这是查询:

SELECT 
posts.num, 
posts.title, 
DATEDIFF(NOW(),posts.createdDate) as NumOfDays,
COUNT( comments.num)  AS totalComments,
COUNT( CASE WHEN comments.parent_comment=0 THEN 0 ELSE comments.parent_comment END)  AS totalReplies,


COUNT( likes.comment_num  ) AS totalLikes,
COUNT( DISTINCT comments.member_num)  AS participants,
cms_uploads.urlPath

FROM posts
LEFT JOIN comments ON comments.post_num = posts.num
LEFT JOIN likes ON likes.comment_num = comments.num


GROUP BY posts.num
ORDER BY totalComments DESC

我得到的结果是 "totalReplies" 计数类似于 "totalComments" 计数。

有什么想法可以让我通过获得正确的总回复数来实现这一点吗?

谢谢!

最佳答案

COUNT() 将计算零。使用 SUM(),一个 la:

SUM( CASE WHEN comments.parent_comment = 0 THEN 1 ELSE 0 END)  AS totalReplies,

关于MySQL:同一个 LEFT JOIN 表中的多个计数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924966/

相关文章:

mysql - 如何在 MySQL 中存储对一个或多个作业的资源分配

MYSQL删除重复更高效?

MySql:如何使用单个查询选择两个表之间的所有连接行以及第一个满足条件的所有行?

mysql - 在mysql查询中结合Left和Right Join

php - 一起显示当天的事件(PHP/MYSQL)

php - 基于另一个表的条件求和列

php - 如何将查询结果存储到 mysql 中的变量中,然后将其用于另一个查询和回显结果?

php - Laravel 在 leftjoin 处分页

mysql - 在grails中使用外键列出数据库中的值

r - left_join 在 R 中的 by 参数中使用字符向量