Postgresql Postgres SQL数组根据条件从单个表聚合值
我是SQL新手,正在尝试编写以下查询: 我有下表:Postgresql Postgres SQL数组根据条件从单个表聚合值,postgresql,Postgresql,我是SQL新手,正在尝试编写以下查询: 我有下表: user_id | chat_id ---------+--------- 表示用户到聊天室的多对多映射 我希望创建一个查询,查找与输入用户标识关联的所有聊天室标识,然后数组聚合与这些聊天室关联的所有用户标识(不包括输入用户标识) 因此结果应该如下所示,例如: chat_id | user_id ---------+--------- 1 {1,3,5,6} 我有点纠结于下面的问题;但我很确定我搞错了: 将chatI
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我明白了,如果我正确理解你,你可以通过添加另一个条件来实现这一点。请看编辑后的答案你是个漂亮的人!