我想在分组时将两列聚合为一个"数组".

假设一张这样的桌子:

friends_map:
=================================
user_id    friend_id    confirmed
=================================
1          2            true
1          3            false
2          1            true
2          3            true
1          4            false

我想从这个表中进行 Select ,并按用户id分组,然后获得friend id,并确认为一个由逗号分隔的串联值.

目前我有:

SELECT user_id, array_agg(friend_id) as friends, array_agg(confirmed) as confirmed
FROM friend_map
WHERE user_id = 1
GROUP BY user_id

这让我明白:

=================================
user_id    friends      confirmed
=================================
1         [2,3,4]       [t, f, f]

我怎样才能得到:

=================================
user_id    friends     
=================================
1         [ [2,t], [3,f], [4,f] ]

推荐答案

在将这些值输入array_agg()函数之前,可以将它们连接在一起:

SELECT user_id, array_agg('[' || friend_id || ',' || confirmed || ']') as friends
FROM friends_map
WHERE user_id = 1
GROUP BY user_id

演示:SQL Fiddle

Postgresql相关问答推荐

如何在PostgreSQL中对深度嵌套的jsonb属性创建索引

将XML解析从T-SQL迁移到Postgres时出现问题

执行准备好的语句不返回数据

有没有办法共享数据或监控复杂 PostgresQL 事务的进度?

如何包装 record_out() 函数?

处理 sqlalchemy 断开连接的更好方法

如何使用 ActiveRecord json 字段类型

从左连接更新 Postgres

错误:syntax error at or near "user"

Rails 4查询由单个属性唯一

PostgreSQL CASE 在函数中的使用

没有查询要创建的in ... error

如何在 postgres json 列中查询嵌套数组?

如何只允许一个表的一行?

Postgresql 中的 NOT EXISTS 子句

Oracle 相当于 Postgres 的 DISTINCT ON?

如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作

处理用户发送的string contains null byte

PostgreSQL - 作为表名的动态值

pg_restore 目录错误