[英]Return zero instead NULL in subquery
我需要計算每位作者的職位。 我正在使用子查詢來計數它們。 但是在沒有作者的地方,結果為NULL,但我希望為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
我該如何解決這個問題?
使用COALESCE
:
SELECT id, name,
COALESCE((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函數中來解決此問題。
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
解決您的問題,但是如果您使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.