2017-07-15 40 views
1

使用Postgres 9.5。當列不存在時,Postgres SUM返回0行。 COALESCE和ISNULL不起作用

我想獲得用戶提交的鏈接投票的SUM。認爲Reddit業力,SO等

它完美的用戶與提交links,但當用戶沒有任何links然後我得到0行在我的迴應。

這是SUM(links.votes)還是內部連接的問題?我對SQL很陌生,所以我可能從錯誤的角度來看待這個問題。

我的查詢如下:

SELECT 
users.firstname, 
users.lastname, 
users.email, 
users.created_on, 
SUM(links.votes) AS sum 
FROM users 
INNER JOIN links 
ON users.id = links.created_by 
WHERE users.id = 50 
AND links.created_by = 50 
GROUP BY users.firstname, users.lastname, users.email, users.created_on 

我也想這樣做COALESCE(SUM(links.votes), 0) AS sum以爲這樣就可以在「金額」列返回0,但這並不能工作。

這裏的任何想法?

謝謝!

回答

2

你需要一個left join

SELECT u.firstname, u.lastname, u.email, u.created_on, 
     SUM(l.votes) AS sum 
FROM users u LEFT JOIN 
    links l 
    ON u.id = l.created_by AND 
     l.created_by = 50 
WHERE u.id = 50 
GROUP BY u.firstname, u.lastname, u.email, u.created_on; 

注意,在links表的條件ON條款,而不是WHERE子句中去。

+0

你搖滾。完美的作品。謝謝,我猜想非常基本的答案!欣賞它。週末愉快 :) – bolle

1

您將需要LEFT OUTER JOIN並且您必須能夠處理NULL,在不存在投票的情況下SUM的結果。 您可以使用CASE使您的語句返回0而不是NULL。