Sql 选择相互关联的用户并按组对其进行聚类

Sql 选择相互关联的用户并按组对其进行聚类,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,我有一个数据表: +--------+---------+ | userid | item | +--------+---------+ | user_1 | abc_1 | | user_2 | abc_1 | | user_2 | def_1 | | user_3 | def_1 | | user_4 | bla_bla | | user_4 | null_bla| | user_5 | ghi_2 | | user_5 | jkl_2 | | user_6 |

我有一个数据表:

+--------+---------+
| userid | item    |
+--------+---------+
| user_1 | abc_1   |
| user_2 | abc_1   |
| user_2 | def_1   |
| user_3 | def_1   |
| user_4 | bla_bla |
| user_4 | null_bla|
| user_5 | ghi_2   |
| user_5 | jkl_2   |
| user_6 | ghi_2   |
| user_6 | mno_2   |   
+--------+---------+
我想确定拥有相同项目的网络用户,并将他们分为每个组。如果该用户与其他用户没有任何类似的项,则将其从输出中排除(在本例中,我希望排除用户_4)。理想的查询输出(具有不同的用户)如下所示:

+--------+---------+
| userid | network |
+--------+---------+
| user_1 | 1       |
| user_2 | 1       |
| user_3 | 1       |
| user_5 | 2       |
| user_6 | 2       |
+--------+---------+
用户_1、用户_2、用户_3被分组到网络1中,因为用户_1(abc_1)和用户_2(abc_1)用户_2(def_1)和用户_3(def_1)具有构成网络1的相同项。同样的概念也适用于网络2


另外,仅供参考,我的桌子上有1000多人。我正在使用AWS红移(Postgresql 8.0)。任何有效的查询都会很有帮助。谢谢。

基本上,这需要一个递归CTE或分层查询,而Redshift不支持这些查询。你需要做循环来完成这一点。