代码之家  ›  专栏  ›  技术社区  ›  Adrian Coutsoftides

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

  •  0
  • Adrian Coutsoftides  · 技术社区  · 4 年前

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

    我有下表:

     user_id | chat_id 
    ---------+---------
    

    这代表了用户到聊天室的多对多映射;

    我希望创建一个查询来查找所有 chat_id 与输入相关的s user_id ,然后数组聚合所有 user_id s与除输入之外的聊天记录相关联 user_id .

    因此,结果应该看起来像这样,例如:

     chat_id | user_id 
    ---------+---------
        1     {1,3,5,6}
    

    我对以下问题有些困惑;但我很确定我做错了什么:

    WITH chatIDs AS (SELECT user_chats.chat_id FROM user_chats WHERE user_chats.user_id=$1)
    WITH userIDs AS (SELECT user_chats.user_id FROM user_chats WHERE user_chats.chat_id=chatIDs AND user_chats.user_id != $1)
    SELECT chatIDs, array_agg(userIDs) FROM user_chats;
    

    编辑:

    为清晰起见而编辑

    1 回复  |  直到 4 年前
        1
  •  1
  •   likle    4 年前

    我认为你可以使用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