SQL笔试题【数据岗】

视频号数据分析组外包招聘笔试题时间限时 45 分钟完成

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

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

SELECT
	vu.video_user_id AS user_id,
	count( DISTINCT uva.video_id ) AS video_count,
	sum( CASE WHEN uva.action_type = 1 THEN 1 ELSE 0 END ) AS exposure_user_count,
	sum( CASE WHEN uva.action_type = 2 THEN 1 ELSE 0 END ) AS like_user_count,
	sum( CASE WHEN uva.action_type = 1 THEN 1 ELSE 0 END ) AS exposeure_count,
	sum( CASE WHEN uva.action_type = 2 THEN 1 ELSE 0 END ) AS like_count 
FROM
	t_user_video_action_d uva
	JOIN t_video_d v ON uva.video_id = v.video_id
	JOIN t_video_user_d vu ON v.video_user_id = vu.video_user_id 
WHERE
	v.video_type = ‘搞笑’ 
	AND uva.ds >= to_date ( to_char ( SYSDATE,’ YYYYMMDD’ ) - 7,’ YYYYMMDD’ ) 
GROUP BY
	vu.video_user_id 
ORDER BY
	vu.video_user_id;

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

SELECT
	count( DISTINCT CASE WHEN v.video_description LIKE ‘ %搞笑段子%’ OR v.video_description LIKE ‘ %脱口秀%’ THEN video_id ELSE NULL END ) AS funny_count,
	Count( DISTINCT CASE WHEN v.video_description NOT LIKE ‘ %搞笑段子%’ AND v.video_description NOT LIKE ‘ %脱口秀%’ THEN v.video_id ELSE NULL END ) AS not_funny_count form t_video_d v 
WHERE
	v.ds = to_date ( ‘ 20221103’,’ YYYYMMDD’ );

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

SELECT
	uva.ds AS date,
	uva.user_id,
	min( uva.TIMESTAMP ) AS first_exposure_timestamp form t_user_video_action_d uva 
WHERE
	uva.action_type = 1 
GROUP BY
	uva.user_id,
	uva.ds;

题目 4:输出一张 dws 表,查询过去任意日期的曝光活跃用户的 7 日留存率,输出字 段日 期,用户 id,7 日留存率具体表结构如下表 1 用户行为表:t_user_video_action_d l分区:ds(格式 yyyyMMdd) l主键:user_id、video_id l含义:一个用户对一个视频的所有行为聚合,每天增量 字段名字段含义类型

SELECT
	uvu.ds AS date,
	uvu.video_user_id AS user_id,
CASE
	
	WHEN count( DISTINCT first_action.video_user_id ) = 0 THEN
	0 ELSE sum( CASE WHEN to_char ( uvu.ds,’ YYYYMMDD’ ) BETWEEN first_action.first_ds AND first_action.first_ds + 6 THEN 1 ELSE 0 END ) 
	END / count( distion first_action.video_user_id ) AS retention_rate Form t_video_user_d uvu
	JOIN ( SELECT user_id, video_id, ds AS first_ds form t_user_video_action_d WHERE action_type = 1 GROUP BY user_id, video_id, ds ORDER BY ds ASC ) first_action ON uvu.video_user_id = first_action.user_id 
GROUP BY
	uvu.video_user_id,
uvu.ds;

相关推荐

  1. SQL试题数据

    2024-07-15 03:22:02       21 阅读
  2. 成都某公司试题sql

    2024-07-15 03:22:02       42 阅读
  3. 前端试题(一)

    2024-07-15 03:22:02       48 阅读
  4. 前端试题(二)

    2024-07-15 03:22:02       52 阅读
  5. 前端试题(一)

    2024-07-15 03:22:02       46 阅读
  6. 前端试题(七)

    2024-07-15 03:22:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 03:22:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 03:22:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 03:22:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 03:22:02       69 阅读

热门阅读

  1. sqlalchemy排序

    2024-07-15 03:22:02       18 阅读
  2. 深入探讨微服务架构设计模式与常见实践

    2024-07-15 03:22:02       19 阅读
  3. SQL执行慢的原因?如何排查?

    2024-07-15 03:22:02       24 阅读
  4. 常用设计模式

    2024-07-15 03:22:02       22 阅读
  5. Mybatis 传递数组给sql解析 解决not in失效问题

    2024-07-15 03:22:02       20 阅读
  6. sqlalchemy使用with_entities返回指定数据列

    2024-07-15 03:22:02       16 阅读
  7. Redis如何高效安全的遍历所有key

    2024-07-15 03:22:02       12 阅读
  8. ansible安装

    2024-07-15 03:22:02       18 阅读