sql - 获取具有条件的关联记录数
问题描述
我有两张桌子:
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 做条件吗?
解决方案
您可以尝试将 where 子句的条件放在 ON 子句中,如下所示 -
SELECT users.id, COUNT(houses.id)
FROM users
LEFT JOIN houses on houses.user_id = users.id
and houses.sold_at IS NOT NULL
GROUP BY users.id
推荐阅读
- python-2.7 - 更新 10,000 条记录 - 最好的方法是什么
- python - 将低于某个 CV2 颜色图阈值的值设置为透明
- python - 以月为单位绘制 x 轴
- java - net.sf.json.JSONObject.fromObject(null) 不会抛出任何异常?
- c# - 无法生成要构建和调试的资产。OmniSharp 服务器未运行
- google-bigquery - 大查询中的宏变量是否可能?
- javascript - 如何从对象动态添加查询参数?
- excel - 在此处仅在某些 Win 10 机器上接收运行时错误 91
- java - 使用 JNDI 查找来检查是否在应用程序服务器中?
- javascript - For 循环在验证表单时只运行一次