首页 > 解决方案 > 获取具有条件的关联记录数

问题描述

我有两张桌子:

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 做条件吗?

标签: sqlpostgresqlcountconditional-statements

解决方案


您可以尝试将 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

推荐阅读