我有两个表:
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个条件进行计数吗?
答案 0 :(得分:1)
您可以尝试将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
答案 1 :(得分:1)
count(如果我没记错的话)应该仅对非null值起作用,因此在count()函数中指明列名即可直接使用
SELECT users.id, COUNT( houses.sold_at )
FROM users LEFT JOIN houses on houses.user_id = users.id
GROUP BY users.id
并且您不应该在其他情况下使用左连接列名作为内部连接..为此,您应该在相关的ON子句中移动条件
答案 2 :(得分:0)
这应该适用于RIGHT JOIN
SELECT users.id, COUNT(houses.id)
FROM users
RIGHT JOIN houses on houses.user_id = users.id
WHERE houses.sold_at IS NOT NULL
GROUP BY users.id