postgresql 获取sql中项计数〈= 1的用户

w41d8nur  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(166)

我们在PostgreSQL 12中有以下表格:

User -> id, name, email
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;

但它失败了,给了我这个错误。
错误:WHERE行1中不允许集合函数:...“user”上的内部联接项。id = item.user_id,其中count(item...
所以我认为查询需要更多的技术。有人能帮我吗?谢谢

bbuxkriu

bbuxkriu1#

您可以:

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
pinkon5k

pinkon5k2#

从技术上讲,您并不需要为此使用JOIN。您可以使用GROUP BYitem表中获取所有必要的数据。

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

相关问题