文章目录
共同使用ip用户检测问题
一、题目
二、分析
三、SQL实战
四、样例数据参考
共同使用ip用户检测问题
一、题目
现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对。
样例数据:
结果数据:
二、分析
- 题目给出的数据是登录记录,需要使用IP进行关联,找到使用相同IP的记录。
- 因为要使用ip进行关联,首先保证每个用户同一个IP只有一条记录,否则关联会导致结果数据重复。
- 自关联,会导致使用相同IP的用户,出现1-2,2-1两条记录、1-1,2-2自己的记录,这些记录需要去重和剔除;
- 计算共同使用过的IP数量,得出结果。
维度 | 评分 |
---|---|
题目难度 | ⭐️⭐️⭐️⭐️ |
题目清晰度 | ⭐️⭐️⭐️⭐️⭐️ |
业务常见度 | ⭐️⭐️⭐️⭐️ |
三、SQL实战
1、将所有用户登录记录按照用户ID和登录IP去重。
查询语句:
select user_id,ip
from t6_login_log
group by user_id, ip;
查询结果:
2、通过IP地址进行自关联,去重,剔除相同用户。
查询语句:
with tmp as
(select user_id,
ip
from t6_login_log
group by user_id, ip)
select t1.user_id,
t2.user_id,
t1.ip
from tmp as t1
join
tmp as t2
on t1.ip = t2.ip
where t1.user_id < t2.user_id;
查询结果:
3、根据用户组计算使用共同IP的个数。
查询语句:
with tmp as
(select user_id,
ip
from t6_login_log
group by user_id, ip)
select t1.user_id,
t2.user_id,
count(t1.ip)
from tmp as t1
join
tmp as t2
on t1.ip = t2.ip
where t1.user_id < t2.user_id
group by t1.user_id,
t2.user_id;
查询结果:
4、查询共同使用过3个以上IP的用户对。
查询语句:
with tmp as
(select user_id,
ip
from t6_login_log
group by user_id, ip)
select t1.user_id,
t2.user_id
from tmp as t1
join
tmp as t2
on t1.ip = t2.ip
where t1.user_id < t2.user_id
group by t1.user_id,
t2.user_id
having count(t1.ip) >= 3
查询结果:
5、合并过滤去重用户,得到最终结果。
查询语句:
with tmp as
(select user_id,ip
from t6_login_log
group by user_id, ip
),
t1 as (
select t1.user_id as user_id_a,
t2.user_id as user_id_b
from tmp as t1
join
tmp as t2
on t1.ip = t2.ip
where t1.user_id < t2.user_id
group by t1.user_id,
t2.user_id
having count(t1.ip) >= 3
)
select user_id from
(select user_id_a as user_id from t1
union all
select user_id_b as user_id from t1) tt
group by user_id;
查询结果:
四、样例数据参考
--建表语句
CREATE TABLE t6_login_log (
user_id bigint COMMENT '用户ID',
ip string COMMENT '用户登录ip地址',
time_stamp string COMMENT '登录时间'
) COMMENT '用户登录记录表';
-- 插入数据
insert into t6_login_log(user_id,ip,time_stamp)
values
(1,'223.104.41.101','2024-08-24 16:00:00'),
(1,'223.104.41.121','2024-08-24 17:00:00'),
(1,'223.104.41.104','2024-08-24 19:00:00'),
(1,'223.104.41.122','2024-08-24 21:00:00'),
(1,'223.104.41.122','2024-08-24 22:00:00'),
(2,'223.104.41.101','2024-08-24 07:00:00'),
(2,'223.104.41.103','2024-08-24 19:00:00'),
(2,'223.104.41.104','2024-08-24 16:30:00'),
(2,'223.104.41.122','2024-08-24 17:05:00'),
(3,'223.104.41.103','2024-08-24 18:11:00'),
(3,'223.104.41.122','2024-08-24 19:07:00'),
(3,'223.104.41.101','2024-08-24 16:02:00'),
(4,'223.104.41.126','2024-08-24 13:00:00'),
(5,'223.104.41.126','2024-08-24 11:00:00'),
(4,'223.104.41.122','2024-08-24 10:00:00');
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨