Mysql 在子查询中返回零而不是NULL

Mysql 在子查询中返回零而不是NULL,mysql,count,subquery,Mysql,Count,Subquery,我需要统计每个作者的帖子。我正在使用子查询来计算它们。 但是,如果作者没有发布,则结果为空,但我希望为0 SELECT id, name, (SELECT COUNT(id) FROM posts WHERE post.author = authors.id GROUP BY author) as post_num FROM authors ORDER BY post_num DESC 如何解决此问题?使用: 使用: 我认为可以通过将内部select放在IsNu

我需要统计每个作者的帖子。我正在使用子查询来计算它们。 但是,如果作者没有发布,则结果为空,但我希望为0

SELECT id, name,
    (SELECT COUNT(id)
    FROM posts
    WHERE post.author = authors.id
    GROUP BY author) as post_num
FROM authors
ORDER BY post_num DESC
如何解决此问题?

使用:

使用:


我认为可以通过将内部select放在IsNull函数中来解决这个问题

Select id, name,
IsNull(SELECT COUNT(id) FROM posts
       WHERE post.author = authors.id
       GROUP BY author, 0) as post_num
FROM authors
ORDER BY post_num DESC


基本上,如果IsNull函数的第一个参数为NULL,则将传递第二个参数。如果没有,则第一个参数的结果将被传递。

我认为可以通过将内部select放入IsNull函数来解决这个问题

Select id, name,
IsNull(SELECT COUNT(id) FROM posts
       WHERE post.author = authors.id
       GROUP BY author, 0) as post_num
FROM authors
ORDER BY post_num DESC


基本上,如果IsNull函数的第一个参数为NULL,则将传递第二个参数。如果没有,则FILT参数的结果将被通过。

代码> CueSeCs<代码>解决您的问题,但如果使用<代码>左连接< /代码>,您可能会获得更好的性能。因此,请考虑尝试。

 SELECT a.id, a.name, count(post.author) as post_num
 FROM authors a
 LEFT JOIN post p 
        ON a.id = p.author
 GROUP BY a.id

<>代码> CueSeCs<代码>解决你的问题,但是如果你使用<代码>左连接< /代码>,你可能会得到更好的性能。
 SELECT a.id, a.name, count(post.author) as post_num
 FROM authors a
 LEFT JOIN post p 
        ON a.id = p.author
 GROUP BY a.id

我在读“COALESCE”和“ISNULL”之间的区别,我不完全理解,但在我的例子中我认为是一样的。我在读“COALESCE”和“ISNULL”之间的区别,我不完全理解,但在我的例子中我认为是一样的。这个查询在后端面板中调用,很少使用。因此,绩效并不那么重要。乔治的解决方案对我来说已经足够了。谢谢你的建议。还好,只是想分享其他解决方案,也很容易阅读。如果可以避免的话,我不太喜欢内联子查询。这个查询是在后端面板中调用的,很少使用。因此,绩效并不那么重要。乔治的解决方案对我来说已经足够了。谢谢你的建议。还好,只是想分享其他解决方案,也很容易阅读。如果可以避免的话,我不太喜欢内联子查询。