当列不存在时,Postgres SUM返回0行。 COALESCE和ISNULL不工作

时间:2017-07-15 02:44:56

标签: sql database postgresql

使用Postgres 9.5。

我试图获得用户提交链接投票的总和。想想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 个答案:

答案 0 :(得分:2)

您需要override func didMove(to view: SKView) { let sprite1 = SKSpriteNode(imageNamed: "Spaceship") sprite1.anchorPoint = CGPoint(x:0.5,y:0.5) sprite1.position = CGPoint.zero sprite1.zPosition = 1 let sprite2 = SKSpriteNode(imageNamed: "Spaceship") sprite2.anchorPoint = CGPoint(x:0.5,y:0.5) sprite2.position = CGPoint(x:0,y:300) addChild(sprite1) addChild(sprite2) let intersection = sprite1.frame.intersection(sprite2.frame) let miniSprite = SKSpriteNode(color:.red,size:intersection.size) miniSprite.alpha = 0.5 miniSprite.anchorPoint = CGPoint(x:0.0,y:0.0) miniSprite.position = intersection.origin miniSprite.zPosition = 2 sprite1.parent!.addChild(miniSprite) let croppedNode = SKCropNode() croppedNode.maskNode = sprite1.copy() as? SKNode croppedNode.zPosition = 3 sprite1.addChild(croppedNode) let biggy = SKSpriteNode(color: .white, size: (scene?.size)!) miniSprite.move(toParent:croppedNode) }

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子句中。

答案 1 :(得分:1)

您需要 LEFT OUTER JOIN ,并且您必须能够处理NULL,即在不存在投票的情况下SUM的结果。 您可以使用 CASE 使您的语句返回0而不是NULL。