簡體   English   中英

在子查詢中返回零而不是NULL

[英]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

MSDN鏈接

基本上,如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM