postgresql - 如何从该数据集中创建组?

标签 postgresql aggregate-functions postgresql-9.2

我有一个表格如下:

   id    | similar_id|
 --------+-----------+
    1    |     2     |
    1    |     3     |
    2    |     1     |
    2    |     3     |
    3    |     1     |
    3    |     2     |
    4    |     5     |
    5    |     4     |

如何编写优化的 sql 查询以便找到相似的组?
即 Group1 -> {1,2,3},Group2 -> {4,5}


附言,我知道数据本来可以组织得更好。

最佳答案

select distinct (
    select array_agg(a order by a)
    from unnest(a) a(a)
) as "group"
from (
    select id || array_agg(similar_id) a
    from t
    group by id
) s
order by 1
;
  group  
---------
 {1,2,3}
 {4,5}

根据这些数据:

create table t (id int, similar_id int);
insert into t (id, similar_id) values
(1,2),
(1,3),
(2,1),
(2,3),
(3,1),
(3,2),
(4,5),
(5,4);

关于postgresql - 如何从该数据集中创建组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39010991/

相关文章:

mysql - 有点复杂的 MySQL 语句

mysql - GROUP_CONCAT() 不能单独使用?

ruby-on-rails - 重新启动 mac PG::ConnectionBad 后无法连接到 postgres

sql - 如何将值插入到 PostgreSQL 表的新添加列的行中

hibernate - 使用 JPA 和 PostgreSQL 9.0 分组

php - 在本地主机上使用 pdo 连接到 postgresql 时出现问题 (08006)

javascript - JSON 错误对象中奇怪的未命名属性

postgresql - 为 postgresql 全文搜索添加新语言

从子查询计算百分比的 SQL 查询

sql - 仅将表用于多重继承是一种不好的做法吗?