sql - 获取具有条件的关联记录数

标签 sql postgresql count conditional-statements

我有两个表:

users 只有两列:id: INT, name: TEXT

houses 三列:id: INT, user_id: INT, sold_at: DATE

我有这个查询可以找到用户出售的房屋数量:

SELECT users.id, COUNT(CASE WHEN houses.sold_at IS NOT NULL THEN 1 END)
FROM users
LEFT JOIN houses on houses.user_id = users.id
GROUP BY users.id

这行得通,但我想知道是否有办法在计数中不包含该条件。我试过这个:

SELECT users.id, COUNT(houses.id)
FROM users
LEFT JOIN houses on houses.user_id = users.id
WHERE houses.sold_at IS NOT NULL
GROUP BY users.id

但这行不通,因为如果用户没有任何关联的房子,它就不会出现在结果集中。

我是对 COUNT 设置条件的唯一选择吗?

最佳答案

count(如果我没记错的话)应该只对非空值起作用,所以在 count() 函数中指示列名你可以直接使用

SELECT users.id, COUNT( houses.sold_at )
FROM users LEFT JOIN houses on houses.user_id = users.id
GROUP BY users.id

你不应该在其他地方使用左连接列名,因为这是一个内连接..为此你应该在相关的 ON 子句中移动条件

关于sql - 获取具有条件的关联记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53929740/

相关文章:

postgresql - 在Kubernetes中执行命令postStart时退出代码:137

sql - 使用 PostgreSQL 批量更新同一查询中的多行

MYSQL统计重复值

mysql - 我如何像格式化程序一样构造 SQL 代码,以使其通过 SQL 命令更好地读取到数据库

sql - 图数据库与关系数据库中表示的图有何不同?

mysql - 数据库服务器、分区和实例

c# - 计算字典中以特定文本开头的项目

php - 如何对查询进行多项检查以选择其中一项为真?

php - MySQL关于更新表的错误

PHP mysql创建树状层次结构及其计数