sql在相关组上生成组

时间:2019-02-08 11:08:20

标签: sql grouping

对不起,如果问题不清楚,我在第一张桌子上就把它弄错了。我做了一些更新:

数据库:PostgreSQL

enter image description here

我想基于过渡对表进行分组(如果a = b&b = c然后a = c)

enter image description here

添加一对(4,c)将2个组合并为一个“ group1”。

2 个答案:

答案 0 :(得分:0)

我假设您希望a.b.c为group1,而d为group2。 使用别名,groupby可以很好地工作。.

但是op op想要的组数是300万个组,因此存储的proc的末尾和group by都可以正常工作。

答案 1 :(得分:0)

从您的评论看来,您似乎想找出传递关系。 您可以通过以下查询来做到这一点。但是,如果这里的目标只是识别具有各自ID的不同组之间的关系,我想您可以负担得起没有以1递增的组。

根据您在OP中给出的示例,我认为如果最终结果是group1group5而不是group2,它将不会影响您。

如果提及结果很好,则可以使用以下更新的查询来做到这一点。连续提供组名将影响您的查询性能,因为您拥有300万个组。

请尝试以下查询:

select t1.id,   concat('group', min(t2.minId)) groups                                                                          
from t1
join
   (select min(id) minId, groups
    from t1
    group by groups
    ) t2
    on t1.groups = t2.groups
    join (select @cnt := 1)y
  group by t1.id;

演示:Click here