首页 > 其他分享 >数据分析组外包招聘真实笔试题

数据分析组外包招聘真实笔试题

时间:2024-09-10 14:53:40浏览次数:12  
标签:数据分析 -- 笔试 留存 video user 组外 id select

题目 根据 3 张表表结构,写出具体求解的 SQL 代码 (搞笑品类定义:视频分类或者视频创建者分类为“搞笑”)

表创建语句:

create table t_user_video_action_d(
    ds int,
    user_id string,
    video_id string,
    action_type int,
    `timestamp` bigint
)
row format delimited
fields terminated by ',';

create table t_video_d(
    ds int ,
    video_id string,
    video_type string,
    video_user_id string,
    video_create_time bigint,
    video_description string
)
row format delimited
fields terminated by ',';

create table t_video_user_d(
    ds int,
    video_user_id string,
    video_user_name string,
    video_user_type string

)
row format delimited
fields terminated by ',';

题目 1:输出一张搞笑品类 dws 表,用于分析作者近 3 条视频情况:输出每个视频 创建者 user_id 最近发布的 3 个视频,在过去一周内的曝光,点赞总数;需要产出字段:视频 创 建者 user_id,曝光用户数,点赞用户数,曝光次数、点赞次数

select `current_date`();
select unix_timestamp();
select unix_timestamp()-7*24*3600;
select from_unixtime(1725326963+8*3600);
with t as (
   select uva.user_id,action_type,row_number() over (partition by uva.user_id order by video_create_time desc ) px from t_user_video_action_d uva join t_video_d  tvd on uva.user_id=tvd.video_user_id
            and uva.video_id = tvd.video_id  where tvd.video_type='搞笑' and video_create_time >= (unix_timestamp()-7*24*3600)
)
select
    user_id,
    count(if(t.action_type=1,t.user_id,null) ) `曝光用户数`,
    count(if(t.action_type=2,t.user_id,null) ) `点赞用户数`,
    count(if(t.action_type=1,1,null) ) `曝光次数`,
    count(if(t.action_type=1,1,null) ) `点赞次数`
    from t where t.px <= 3 group by user_id;

题目 2:输出一个取数结果:在 20221103 日创建的视频中,如果视频描述中带有 "搞笑段 子”,“脱口秀”两个关键词即为“搞笑类内容”,不带有这两个关键词为“非搞笑类内 容”,最终输出 20221103 日搞笑与非搞笑视频去重数量

-- 假如你创建的是分区表,其实可以使用分区表字段进行判断  ds = '20221103'
select "搞笑类视频" `类别`,count(1) `数量` from t_video_d
         where video_description like '%搞笑段子%' or video_description like '%脱口秀%'
           and  from_unixtime(t_video_d.video_create_time+8*3600,'yyyyMMdd') ='20221103'
union
select "非搞笑类视频",count(1)  from t_video_d
         where video_description not like '%搞笑段子%' and  video_description not  like '%脱口秀%'
         and  from_unixtime(t_video_d.video_create_time+8*3600,'yyyyMMdd') ='20221103';

-- 第二种写法
select
    sum(case when video_description like '%搞笑段子%' or video_description like '%脱口秀%' then 1 else 0 end)  `搞笑视频数量`,
    sum(case when video_description not like '%搞笑段子%' and  video_description not  like '%脱口秀%' then 1 else 0 end) `非搞笑视频数量`
   from t_video_d where  from_unixtime(t_video_d.video_create_time+8*3600,'yyyyMMdd') ='20221103';

题目 3:计算每个用户每天第一次曝光视频的时间戳,运行速度越快越好,输出字段 日期, 用户 id,时间戳

-- 一个人一天刷了很多抖音,他刷第一个抖音的时候是几点几分。
select user_id,ds,min(`timestamp`) from
     t_user_video_action_d where action_type = 1 group by user_id,ds

题目 4:输出一张 dws 表,查询过去任意日期的曝光活跃用户的 7 日留存率,输出字 段日 期,用户 id,7 日留存率具体表结构如下表 1 用户行为表:t_user_video_action_d

l分区:ds(格式 yyyyMMdd)

l主键:user_id、video_id

l含义:一个用户对一个视频的所有行为聚合,每天增量 字段名字段含义类型

留存用户:某段时间内的新增用户,经过一段时间后,又继续使用应用的被认作是留存用户。

留存率:留存用户占新增用户的比例即是留存率

比如:7月1日新增用户100,这100人中在7月2日启动过应用的有30人,7月3日启动过应用的有25人,7月4日启动过应用的有32人

可以这样说7月 1的 1日留存用户 有30人,2日留存用户有25人,3日留存用户有32人。

则7月1日新增用户次日的留存率是30/100=30%,两日留存率是25/100=25%,三日留存率是32/100=32%

1日留存,3日留存,7日留存,30日留存等

假如2023-12-05日数据出来后,可以计算12-04的1日留存,12-03的2日留存,12-02的3日留存。留存不需要连续。

假如一个人12-04日是新增用户,他12-05日活跃了,可以这样说 这个人是 12-04日的1日留存用户。

在留存的天数中,是不需要连续的。

-- 先查看曝光的用户和日期
with t as (
    -- 9-10  zhangsan
    -- 9-10  lisi
    -- 9-17  zhangsan
    select ds,user_id  from t_user_video_action_d where action_type = 1 group by user_id,ds
)
-- 让7天前的数据 处于 当前数据 = 留存率  ds=20240910
, t2 as (
    select ds,user_id  from t where ds =
       date_add(from_unixtime(unix_timestamp("20240910",'yyyyMMdd'),'yyyy-MM-dd'),7)
)
select
    t.user_id,count(t2.user_id)/count(t.user_id) `七日留存率`
    from t left join t2 on t.user_id = t2.user_id group by t.user_id;

-- 如何将20240910 --> 2024-09-10
-- 字符串转时间戳
select unix_timestamp("20240910",'yyyyMMdd');
select from_unixtime(unix_timestamp("20240910",'yyyyMMdd'),'yyyy-MM-dd');
select date_add(to_date('2024-09-10'),7);

-- 拓展  通过拼接的方式将20240910 --> 2024-09-10
SELECT   
  concat(  
    substr('20240910', 1, 4),   
    '-',   
    lpad(substr('20240910', 5, 2), 2, '0'),   
    '-',   
    lpad(substr('20240910', 7, 2), 2, '0')  
  ) as formatted_date;

标签:数据分析,--,笔试,留存,video,user,组外,id,select
From: https://blog.csdn.net/Yz9876/article/details/142098798

相关文章

  • 分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 sp
    ......
  • 中国柔性屏行业数据分析:
    22.83%消费者认为柔性屏将会取代刚性屏柔性屏行业发展迅速,市场规模不断扩大。柔性屏具有重量轻、可弯曲、对比度高、功耗低、体积小等特点,被广泛应用于消费电子、智能可穿戴设备、汽车电子等领域。目前,中国柔性屏在智能手机、平板电脑、可穿戴设备等方面应用较多。生产过......
  • 视频号数据分析组外包招聘笔试题SQl题目
    一.表结构与要求要求如下:视频号数据分析组外包招聘笔试题时间限时45分钟完成。题目根据3张表表结构,写出具体求解的SQL代码(搞笑品类定义:视频分类或者视频创建者分类为“搞笑”)三张表如下:二.建表语句createtablet_user_video_action_d(dsint,user_......
  • 09django基于Python的智能热门旅游景点数据分析可视化系统的设计与实现
    前言......
  • 数据分析面试题:物流线路主题分析
    目录0场景描述1数据准备2问题分析3小结0场景描述有logistics_route(物流线路表)route_id(线路ID):线路的唯一标识符,BIGINTroutename(线路名称):物流线路的名称,STRINGCREATE TABLE IF NOT EXISTS logistics_route(    route_id    bigi......
  • 【Spark+Hive】基于大数据招聘数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详
    文章目录【Spark+Hive】基于大数据招聘数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)源码获取方式在文章末尾一、 项目概述二、研究意义三、背景四、国内外研究现状五、开发技术介绍六、算法介绍 七、数据库设计八、系统......
  • 华为笔试0828 元素消除
     第二题题目:元素消除给定一个整数数组nums,同时给定一个整数interval。指定数组nums中的某个元素作为起点,然后以interval为间隔递增,如果递增的数(包含起点)等于nums中的元素,则将数组nums中对应的元素消除,返回消除元素最多的起点元素。如果消除的元素同样多,则返回最小的起点元素。......
  • 华为笔试——输出单向链表中倒数第k个节点
    描述输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。链表结点定义如下:struct ListNode{    int m_nKey;    ListNode* m_pNext;};正常返回倒数第k个结点指针,异常返回空指针.要求:(1)正序构建链表;(2)构建后要忘记链表长度......
  • MySQL面试笔试题(基础题)
     1、取得每个部门最高薪水的人员的名称selectenamefromempe,(selectdeptno,max(sal)max_salfromempgroupbydeptno)each_dept_max_salwheree.deptno=each_dept_max_sal.deptnoande.sal=each_dept_max_sal.max_sal;2、哪些人的薪水在部门的平均薪水之上select......
  • 数据分析实战第一节随笔
    引言Python,作为一种高级编程语言,以其简洁明了的语法和强大的功能库,赢得了全球开发者的广泛青睐。它不仅适用于数据科学、机器学习、人工智能等领域,而且在Web开发、自动化脚本编写、科学计算等方面也发挥着重要作用。本文将带领读者从Python的基础语法开始,逐步深入到实际应用,探索P......