首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL总结大厂真题-互相关注

SQL总结大厂真题-互相关注

作者头像
数据仓库晨曦
发布2024-01-08 15:36:37
发布2024-01-08 15:36:37
34400
代码可运行
举报
文章被收录于专栏:数据仓库技术数据仓库技术
运行总次数:0
代码可运行

1题目

现有用户关注者列表记录表t_user_follower,有两个字段,用户ID(user_id),关注者列表(follower_ids),关注者列表中是关注用户的用户ID,数据样例如下:

请找出互相关注的用户

2.考点

  1. follower_ids是一个列表,所以需要进行展开,用到UDTF函数(列转行,炸裂函数)lateral view
  2. 字符串拼接函数concat_ws()
  3. if()

3.SQL

step1:把follower_ids炸裂,转换成多行

代码语言:javascript
代码运行次数:0
运行
复制
-- 炸裂函数
select
  user_id,
  follower_ids,
  follower_id
from t_user_follower
lateral view explode(split(follower_ids,',')) t as follower_id

执行结果

step2:把user和follower_id进行有序拼接,从而把0001关注0002和0002关注0001拼接成相同的字符串,使得两行有相同的内容,产生关联。

代码语言:javascript
代码运行次数:0
运行
复制
select
    user_id,
    follower_id,
    if(user_id<follower_id,concat_ws(',',user_id,follower_id),concat_ws(',',follower_id,user_id)) as friend,
    follower_ids
from t_user_follower lateral view explode(split(follower_ids,',')) t as follower_id

执行结果

step3:根据拼接字符串进行统计,并限定行数为2,从而得到最终结果。

代码语言:javascript
代码运行次数:0
运行
复制
select
    friend
from
    (
        select
            user_id,
            follower_ids,
            follower_id,
            if(user_id<follower_id,concat_ws(',',user_id,follower_id),concat_ws(',',follower_id,user_id)) as friend
        from t_user_follower lateral view explode(split(follower_ids,',')) t as follower_id
    )tt
group by friend
having count(1) =2

执行结果

4.建表语句

代码语言:javascript
代码运行次数:0
运行
复制
-- 建表语句
create table t_user_follower
(
user_id string comment '用户id',
follower_ids string comment '关注者列表'
);
代码语言:javascript
代码运行次数:0
运行
复制
-- 数据插入语句
insert into t_user_follower values
('0001','0002,0003'),
('0002','0001,0003'),
('0003','0004'),
('0004','0001,0002');
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档