• 如何分析粉丝兴趣?


    10a18ad8150fd46fa97b3d3b17a431aa.jpeg

    【题目】

    有一张“粉丝关注表”,包含3个字段:用户id、关注媒体id、日期。

    6e8640f4cb6f99fc4716ca74d20d3a1c.png

    【问题】“粉丝关注表”中存在一个用户同时关注多个媒体的情况存在,比如:用户id为A001的用户,对应关注媒体id数据为1010,1020,1031。为了便于后期分析粉丝兴趣,请将该表中的这种情况进行拆分为多条。

    比如对于用户A001,其转换如下:

    621a8a8d541d3167117357f9c4afa031.png

    【解题思路】

    这类问题称为“列转行”,在MySQL里的处理方式一般分为三步:

    1)创建一个“序列表”;

    2)进行多表联结,将原表的每一条数据复制为多条;

    3)使用substring_index函数获取最终结果。

    第一步:创建序列表

    “序列表”是指只有一个字段,存储的是数字序列,比如:

    f15d4249f30b0b40bf5eb8f027801636.png

    其中,“序列”的最大值就是该问题中一个用户关注媒体的最多个数。

    1. select max(length(关注媒体id) - length(replace(关注媒体id,',','')) + 1) as 最多关注媒体个数
    2. from 粉丝关注表;

    返回结果为:

    34da2976eb21223b75d638b1dfb4c937.png

    那我们需要新建的“序列表”就是:

    6614cc56551e6296dd6563fea4421867.png

    第二步:多表联结

    8a73c3b183908ccfb71253d299b6fe41.png

    使用多表联结,可以通过“序列表”将“粉丝关注表”的每行变成多行。

    此处有两个注意点:

    1)为保证原表中的每一条数据不丢失,选择“左联结”,并以原表为左表;

    2)联结条件里对复制条数进行限制,限制条件是用户关注媒体的数量,即“关注媒体id”字段下的逗号数量加1。

    1. select t1.用户id,
    2.        t1.关注媒体id,
    3. t1.日期,
    4. t2.序列
    5. from 粉丝关注表 t1
    6. left join 序列表 t2 on t2.序列 <= (length(关注媒体id) - length(replace(关注媒体id,',','')) + 1);

    返回结果为:

    c3fe3d01ee740121ac4e3e25ccf2b2d5.png

    第三步:使用函数获取结果

    接下来就是将媒体id截取出来,需要用到字符串截取函数:SUBSTRING_INDEX。

    SUBSTRING_INDEX(字符串,分隔符,参数)

    aec578dcb8fe5dc08b65982a90a65edb.png

    其中,分隔符指本题中分割媒体id的“,”;2指按分隔符分开,从左往右截取几个媒体id;如果参数为负数时,表示从右往左截取几个媒体id。

    1. select t1.用户id,
    2.        substring_index(substring_index(t1.关注媒体id,',',t2.序列),',',-1as 关注媒体id,
    3.        t1.日期
    4. from 粉丝关注表 t1
    5. left join 序列表 t2 on t2.序列 <= (length(关注媒体id) - length(replace(关注媒体id,',','')) + 1);

    返回结果为:

    1eb1e5531526b4ce30d5a5723cae7fe2.png

    【本题考点】

    1)考查对序列表的了解;

    2)考查对字符串截取函数SUBSTRING_INDEX的了解;

    3)考查对多表联结的了解。

    ee834fd7274e1d3688365b11ad863dc0.jpeg

    4df7baad725fffcf2e47fc88458d4c74.jpeg

    ▼ 点击「阅读原文」

    ▼ 解锁更多数据分析课程

  • 相关阅读:
    解决 Python requests 库中 SSL 错误转换为 Timeouts 问题
    Android 12 init(3) 属性服务
    KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小
    软件开发中,做好需求管理,这4点很关键。
    车载ECU嵌入式设备的诊断测试 – DTC
    提高FLASH的擦写次数 “空间换时间”
    【无标题】
    Docker | 入门:原理探究
    SpringBoot-Docker容器化部署发布
    文件上传漏洞 | iwebsec
  • 原文地址:https://blog.csdn.net/zhongyangzhong/article/details/125631030