我有两个表:
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/