对不起,如果问题不清楚,我在第一张桌子上就把它弄错了。我做了一些更新:
数据库:PostgreSQL
我想基于过渡对表进行分组(如果a = b&b = c然后a = c)
添加一对(4,c)将2个组合并为一个“ group1”。
答案 0 :(得分:0)
我假设您希望a.b.c为group1,而d为group2。 使用别名,groupby可以很好地工作。.
但是op op想要的组数是300万个组,因此存储的proc的末尾和group by都可以正常工作。
答案 1 :(得分:0)
从您的评论看来,您似乎想找出传递关系。 您可以通过以下查询来做到这一点。但是,如果这里的目标只是识别具有各自ID的不同组之间的关系,我想您可以负担得起没有以1递增的组。
根据您在OP中给出的示例,我认为如果最终结果是group1
和group5
而不是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