首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从这些数据集中创建组?

如何从这些数据集中创建组?
EN

Stack Overflow用户
提问于 2016-08-18 06:08:25
回答 2查看 23关注 0票数 1

我有一张桌子如下:

代码语言:javascript
复制
   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}

我知道这些数据本可以组织得更好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 12:03:17

代码语言:javascript
复制
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}

根据这些数据:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2016-08-18 12:09:35

简单的普通SQL:

代码语言:javascript
复制
SELECT DISTINCT groups
FROM (
  SELECT id, array_agg(similar_id) groups
  FROM (
    SELECT id, similar_id
    FROM grp
    UNION
    SELECT DISTINCT id, id
    FROM grp
    ORDER BY 1, 2) subsub
  GROUP BY 1) sub
ORDER BY 1;

这将产生:

代码语言:javascript
复制
 groups 
---------
 {1,2,3} 
 {4,5} 

这里的诀窍是使用UNION,使每个id都与自己成对,并且是similar_id,然后这只是一个聚合的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39010991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档