Postgresql Postgres SQL数组根据条件从单个表聚合值

Postgresql Postgres SQL数组根据条件从单个表聚合值,postgresql,Postgresql,我是SQL新手,正在尝试编写以下查询: 我有下表: user_id | chat_id ---------+--------- 表示用户到聊天室的多对多映射 我希望创建一个查询,查找与输入用户标识关联的所有聊天室标识,然后数组聚合与这些聊天室关联的所有用户标识(不包括输入用户标识) 因此结果应该如下所示,例如: chat_id | user_id ---------+--------- 1 {1,3,5,6} 我有点纠结于下面的问题;但我很确定我搞错了: 将chatI

我是SQL新手,正在尝试编写以下查询:

我有下表:

 user_id | chat_id 
---------+---------
表示用户到聊天室的多对多映射

我希望创建一个查询,查找与输入用户标识关联的所有聊天室标识,然后数组聚合与这些聊天室关联的所有用户标识(不包括输入用户标识)

因此结果应该如下所示,例如:

 chat_id | user_id 
---------+---------
    1     {1,3,5,6}
我有点纠结于下面的问题;但我很确定我搞错了:

将chatIDs设置为,从user_chats中选择user_chats.chat_id,其中user_chats.user_id=$1 将userIDs设置为从user_chats中选择user_chats.user_id,其中user_chats.chat_id=chatIDs和user_chats.user_id!=$1. 从用户聊天中选择聊天ID、数组\u agguserIDs; 编辑:


为清晰起见进行了编辑

我相信您可以使用where子句排除用户:

SELECT chat_id, array_agg(user_id) FROM user_chats
WHERE user_id != $1 AND chat_id IN (SELECT chat_id FROM user_chats WHERE user_id = $1)
GROUP BY chat_id

这是有道理的!但我首先必须找到与输入用户id关联的所有聊天id,然后数组聚合与这些聊天关联的所有用户id,但我认为您的查询肯定会出现close@AdrianCoutsoftides我明白了,如果我正确理解你,你可以通过添加另一个条件来实现这一点。请看编辑后的答案你是个漂亮的人!