sql - 当列不存在时,Postgres SUM 返回 0 行。 COALESCE 和 ISNULL 不起作用

标签 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 认为它会在“sum”列中返回 0,但这也不起作用。

这里有什么想法吗?

谢谢!

最佳答案

你需要一个左连接:

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

关于sql - 当列不存在时,Postgres SUM 返回 0 行。 COALESCE 和 ISNULL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45113969/

相关文章:

mysql - 来自不同表的复杂浮点计算

SQL Server : How to get all child records given a parent id in a self referencing table

MySQL 服务器负载非常高

sql - Postgresql:从多个表(具有相同字段)查看

postgresql - 无法更改postgres中列的数据类型

SQL Ms Access 将选择嵌入到某些特定值的 INSERT 语句中

sql - 在具有特定值的连续行上定义一个窗口

MySQL,无法创建外键

PostgreSQL:在插入时创建访问 token

ruby-on-rails - 在本地使用 sqlite3 在 Heroku 上设置 Rails 3.2.2 应用程序