postgre获取 sql 中项目计数 <= 1 的用户



我们在PostgreSQL 12中有这些表:

用户-> id,名称,电子邮件items -> id, user_id, description

我们想要运行一个查询来查找拥有1项或更少的用户。

我尝试使用连接语句,并在WHERE子句中尝试将用户计数<1 .查询

select * from "user" inner join item on "user".id = item.user_id where count(item.user_id) < 1;

但是它失败了,给了我这个错误。

ERROR: WHERE不允许使用聚合函数第一行:……"用户"上的内连接项。Id = item。User_id where count(item…)

所以我认为查询需要更多的技术。有人能帮我一下吗?由于

你可以这样做:

select u.*
from user u
left join (
select user_id, count(*) as cnt from items group by user_id
) x on x.user_id = u.id
where x.cnt = 1 or x.cnt is null

从技术上讲,您不需要为此使用JOIN。您可以使用GROUP BYitem表中获得所有必要的数据。诀窍是您需要使用HAVING而不是WHERE来聚合数据,如COUNT()

SELECT user_id
FROM item
GROUP BY user_id
HAVING COUNT(id) > 1

但是如果你想从user表中看到更多的字段,我们可以添加一个JOIN:

SELECT u.id, u.name, u.email
FROM item i
INNER JOIN "user" u on u.id = i.user_id
GROUP BY u.id, u.name, u.email
HAVING COUNT(i.id) > 1

相关内容

最新更新