-- 1. 取出所有用户使用的所有ip, 去重, t_uuid_ip AS(SELECT
uuid, ip
FROM t_log_in_info
GROUPBY uuid, ip -- 同一个用户在不同时间相同ip登录)
uuid
ip
1001
172.100.10.02
1001
172.100.10.12
1001
172.100.10.13
1002
172.100.10.02
1002
172.100.10.03
1002
172.100.10.11
1002
172.100.10.12
1003
172.100.10.02
1003
172.100.10.03
…
…
-- 2. 使用相同ip的用户对应关系SELECT
a.uuid AS a_uuid, a.ip, b.uuid AS b_uuid
FROM t_uuid_ip a
INNERJOIN t_uuid_ip b
ON a.ip = b.ip
WHERE a.uuid < b.uuid -- 排除 1对1, 1对2 2对1 的情况;
a_uuid
ip
b_uuid
1001
172.100.10.02
1002
1001
172.100.10.02
1003
1001
172.100.10.02
1004
1001
172.100.10.12
1002
1001
172.100.10.12
1003
1001
172.100.10.12
1004
1001
172.100.10.13
1003
1002
172.100.10.02
1003
1002
172.100.10.02
1004
…
…
…
--3. 计算所有用户之间, 共同使用的ip 个数, 取出不小于3个的用户组SELECT
a_uuid, b_uuid,COUNT(ip)AS ip_ct
FROM(SELECT
a.uuid AS a_uuid, a.ip, b.uuid AS b_uuid
FROM t_uuid_ip a
INNERJOIN t_uuid_ip b
ON a.ip = b.ip
WHERE a.uuid < b.uuid -- 排除 1对1, 1对2和2对1 的情况)GROUPBY a_uuid, b_uuid
HAVING ip_ct >=3;