我需要計算每個作者的文章。我使用子查詢來計數它們。 但是,在作者未發佈,則結果爲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
我該如何解決這個問題呢?
我需要計算每個作者的文章。我使用子查詢來計數它們。 但是,在作者未發佈,則結果爲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
我該如何解決這個問題呢?
使用COALESCE
:
我想你可以通過將內選擇在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,第二個參數將被傳遞。如果不是,那麼firt論證的結果將被通過。
我在閱讀「COALESCE」和「ISNULL」之間的區別,我完全不理解,但在我的情況下,我認爲是一樣的。 – WalterV
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
該查詢在後檯面板中調用,很少使用。所以表現並不那麼重要。喬治的解決方案對我來說已經足夠了。感謝您的建議。 – WalterV
是好的,只是想分享其他解決方案,也很容易閱讀。如果我能避免它,不是內聯子查詢的大粉絲。 –
完美!謝謝。 – WalterV