2016-02-08 146 views
1

我需要計算每個作者的文章。我使用子查詢來計數它們。 但是,在作者未發佈,則結果爲NULL,但我希望0返回零而非NULL子查詢

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 

我該如何解決這個問題呢?

回答

1

我想你可以通過將內選擇在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 

MSDN link

基本上如果IsNull函數的第一個參數是NULL,第二個參數將被傳遞。如果不是,那麼firt論證的結果將被通過。

+0

我在閱讀「COALESCE」和「ISNULL」之間的區別,我完全不理解,但在我的情況下,我認爲是一樣的。 – WalterV

1

​​3210解決您的問題,但如果您使用LEFT JOIN,可能會獲得更好的性能,所以請考慮嘗試一下。

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 
+0

該查詢在後檯面板中調用,很少使用。所以表現並不那麼重要。喬治的解決方案對我來說已經足夠了。感謝您的建議。 – WalterV

+1

是好的,只是想分享其他解決方案,也很容易閱讀。如果我能避免它,不是內聯子查詢的大粉絲。 –