牛客题霸-SQL大厂面试真题(一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。

由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。

以下内容是牛客题霸-SQL大厂面试真题(抖音短视频 1-6 题、百度信息流 1-5 题)的 MySQL 代码答案。


SQL 156:查询 2021 年里有播放记录的每个视频的完播率(结果保留三位小数),并按照完播率降序排列

select b.video_id,
round(avg(if(timestampdiff(second, start_time, end_time) >= duration, 1, 0)), 3) as avg_comp_play_rate
from tb_user_video_log a
left join tb_video_info b
on a.video_id = b.video_id
where year(start_time) = 2021
group by 1
order by 2 desc

在这里插入图片描述

SQL 157:查询各类视频的平均播放进度,将进度大于 60% 的类别输出(结果保留两位小数),并按照播放进度降序排列

select tag,
concat(round(avg(if(timestampdiff(second, start_time, end_time) >= duration, 1, 
timestampdiff(second, start_time, end_time)/duration))*100, 2), '%') as avg_play_progress
from tb_user_video_log a
join tb_video_info b
on a.video_id = b.video_id
group by 1
having avg(if(timestampdiff(second, start_time, end_time) >= duration, 1, 
timestampdiff(second, start_time, end_time)/duration)) > 0.6
order by 2 desc

在这里插入图片描述

SQL 158:查询在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)中,每类视频的转发量和转发率(保留3位小数),并按照转发率降序排列

select tag,
sum(if_retweet) as retweet_cut,
round(sum(if_retweet)/count(a.video_id), 3) as retweet_rate
from tb_user_video_log a
join tb_video_info b
on a.video_id = b.video_id
where datediff((select max(start_time) from tb_user_video_log), start_time) <= 29
group by 1
order by 3 desc

在这里插入图片描述

SQL 159:查询 2021 年里每个创作者每月的涨粉率及截止当月的总粉丝量,并按照创作者 ID,总粉丝量升序排列

select author, left(start_time, 7) as month,
round(sum(follow_fans_change)/count(1), 3) as fans_growth_rate,
sum(sum(follow_fans_change)) over(partition by author order by left(start_time, 7)) as total_fans
from(
	select b.video_id, author, start_time,
	case when if_follow = 1 then 1
		 when if_follow = 2 then -1
		 when if_follow = 0 then 0
		 else -1000 end as follow_fans_change
	from tb_user_video_log a
	join tb_video_info b
	on a.video_id = b.video_id
) c
where year(start_time) = 2021
group by 1, 2
order by 1, 4

在这里插入图片描述

SQL 160:查询 2021 年国庆头 3 天每类视频每天的近一周总点赞量和一周内最大单天转发量,并按照视频类别降序排列,日期升序排列

with a as(
	select tag, left(start_time, 10) as dt,
	sum(if_like) as like_cnt,
	sum(if_retweet) as retweet_cnt
	from tb_user_video_log t1
	left join tb_video_info t2
	on t1.video_id = t2.video_id
	group by 1, 2
),
b as(
	select tag, dt,
	sum(like_cnt) over(partition by tag rows between 6 preceding and current row) as sum_like_cnt_7d,
	max(retweet_cnt) over(partition by tag rows between 6 preceding and current row) as max_retweet_cnt_7d
	from a
)

select tag, dt, sum_like_cnt_7d, max_retweet_cnt_7d
from b
where dt in('2021-10-01', '2021-10-02', '2021-10-03')
order by 1 desc, 2

在这里插入图片描述

SQL 161:查询近一个月发布的视频中热度最高的 top3 视频

select video_id,
round((avg(if_complete) * 100 + sum(if_like) * 5 + sum(if_comment) * 3 + sum(if_retweet) * 2) * (1 / (1 + min(diff_time)))) as hot_index
from(
    select
    a.video_id as video_id,
    if(timestampdiff(second, start_time, end_time) >= duration, 1, 0) as if_complete,
    if_like, 
    if_retweet,
    if(comment_id is null, 0, 1) as if_comment,
    datediff((select max(end_time) from tb_user_video_log), end_time) as diff_time
    from tb_user_video_log a
    left join tb_video_info b
    on a.video_id = b.video_id
    where datediff((select max(end_time) from tb_user_video_log), release_time) <= 29
) c
group by 1
order by 2 desc
limit 3

在这里插入图片描述

SQL 162:查询 2021 年 11 月每天的人均浏览文章时长(秒数),结果保留 1 位小数,并按时长由短到长升序排列

select left(in_time, 10) as dt,
round(sum(timestampdiff(second, in_time, out_time)) / count(distinct uid), 1) as avg_viiew_len_sec
from tb_user_log
where left(in_time, 7) = '2021-11' and artical_id <> 0
group by 1
order by 2

在这里插入图片描述

SQL 163:查询每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,结果按最大人数降序排列

with a as(
	select uid, artical_id, in_time as dt, 1 as is_in
	from tb_user_log
	union all
	select uid, artical_id, out_time as dt, -1 as is_in
	from tb_user_log
)

select artical_id, max(uv)
from(
	select artical_id, dt, 
	sum(is_in) over(partition by artical_id order by dt, is_in desc) as uv
	from a
	where artical_id <> 0
) b
group by 1
order by 2 desc

在这里插入图片描述

SQL 164:统计2021年11月每天新用户的次日留存率(保留2位小数)

with reg as(
    select uid, min(left(in_time, 10)) as reg_date
    from tb_user_log
    group by 1
), -- 用户注册表
log as(
    select uid, date(in_time) as log_date
    from tb_user_log
    union
    select uid, date(out_time) as log_date
    from tb_user_log
) -- 用户登陆表

select
reg_date as dt,
round(ifnull(count(l.uid)/count(r.uid), 0), 2) as uv_left_rate
from reg r
left join log l
on r.uid = l.uid
and r.reg_date = date_sub(l.log_date, interval 1 day)
where left(reg_date, 7) = '2021-11'
group by 1
order by 1

在这里插入图片描述

SQL 165:统计活跃间隔对用户分级后,各活跃等级用户占比,结果保留两位小数,且按占比降序排列

with a as(
    select
    uid,
    date(min(in_time)) as first_date, -- 用户注册日期
    date(max(in_time)) as last_date, -- 用户最近活跃日期
    (select date(max(in_time)) from tb_user_log) as today
    from tb_user_log
    group by 1
)

select
user_grade,
round(count(distinct uid) / (select count(distinct uid) from tb_user_log), 2) as ratio
from
(
    select 
    uid,
    case when datediff(today, first_date) <= 6 then '新晋用户'
         when datediff(today, first_date) > 6 and datediff(today, last_date) <= 6 then '忠实用户'
         when datediff(today, first_date) > 6 and datediff(today, last_date) > 29 then '流失用户'
         when datediff(today, first_date) > 6 and datediff(today, last_date) > 6 then '沉睡用户'
        else '其他' end as user_grade
    from a
) b
group by 1

在这里插入图片描述

SQL 166:统计每天的日活数及新用户占比

with reg as(
    select 
    uid, 
    date(min(in_time)) as reg_date
    from tb_user_log
    group by 1
), -- 用户注册表
log as(
    select
    uid,
    date(in_time) as login_date
    from tb_user_log
    union
    select
    uid,
    date(out_time) as login_date
    from tb_user_log
) -- 用户登陆表

select
login_date,
count(distinct l.uid) as dau,
round(count(distinct r.uid) / count(distinct l.uid), 2) as uv_new_ratio
from log l
left join reg r
on l.uid = r.uid
and l.login_date = r.reg_date
group by 1
order by 1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isSymmetric(TreeNode root) {return check(root, root);}public boolean check(TreeNode u, TreeNode v) {Queue<TreeNode> q new LinkedList<TreeNode>();q.offer(u);q.offer(v);while (!q.…

大数据框架总结(全)

☔️ 大数据框架总结&#xff08;全&#xff09; 关注“大数据领航员”&#xff0c;在公众号号中回复关键字【大数据面试资料】&#xff0c;即可可获取2024最新大数据面试资料的pdf文件 一. Hadoop HDFS读流程和写流程 HDFS写数据流程 &#xff08;1&#xff09;客户端通过…

【ARM+Codesys案例】T3/RK3568/树莓派+Codesys锂电池测试设备控制解决方案

锂电池诞生于上世纪60年代&#xff0c;90年代开始由日本索尼公司实现商业化。锂离子电池凭借快速充放电、长循环寿命、无记忆效应等众多优点&#xff0c;成为当今数码产品及电动汽车大规模应用的第一选择。与镍氢电池、铅酸电池相比&#xff0c;锂电池可以存储更多电能。现在&a…

ECOLOGY9解决明细表数据按需显示或隐藏

ECOLOGY9:由于领导需要查看完整的明细表数据&#xff0c;没有启用分页功能&#xff0c;导致大领导查看时又出现几百行的数据&#xff0c;影响使用体验。需求&#xff1a;只看正常表单数据&#xff0c;明细表数据&#xff0c;默认不显示&#xff0c;需要查看时再打开。 实现&am…

抖店怎么选品?抖店爆款选品思路技巧,新手直接用!

大家好&#xff0c;我是电商花花。 抖店选品永远是我们做抖店&#xff0c;做电商的核心&#xff0c;店铺想要出单&#xff0c;想要赚钱&#xff0c;我们就一定要学会怎么选品&#xff0c;怎么筛选商品。 而我们绝大多数新手并没有办法保证持续选爆款的能力&#xff0c;如果店…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…

iptables防火墙【☆】

一、防火墙的基础 防火墙分为硬件防火墙和软件防火墙&#xff0c;硬件防火墙有专门的设备&#xff1a;如国产华为、绿盟等&#xff0c;作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御&#xff0c;在核心业务上再添加软件防火墙提高安全性能…

逆向基础:软件手动脱壳技术入门

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文&#xff0c;希望能给新学软件逆向和脱壳的童鞋们一点帮助。 1 一些概念 1.1 加壳 加壳的全称应该是可执行程序资源压缩&#xff0c;是保护文件的常用手段。加壳过的程序可以直接运行&#xff0c;但是不能查看源代码…

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql&#xff0c;在安装和卸载过程中&#xff0c;都在root用户下完成。文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一&#xff1a;方法二&#xff1a;方法三&#…

huawei 华为 交换机 配置 Dot1q 终结子接口实现跨设备 VLAN 间通信示例

组网需求 如图7-8所示&#xff0c;SwitchA和SwitchB分别下挂VLAN 10和VLAN 20的二层网络&#xff0c;SwitchA和SwitchB之间通过三层网络互通&#xff0c;三层网络采用OSPF协议。要求两个二层网络的PC实现二层隔离三层互通。 图 7-8 配置 Dot1q 终结子接口实现跨设备 VLAN 间通信…

Vue3实战笔记(37)—粒子特效登录页面

文章目录 前言一、粒子特效登录页总结 前言 上头了&#xff0c;再来一个粒子特效登录页面。 一、粒子特效登录页 登录页&#xff1a; <template><div><vue-particles id"tsparticles" particles-loaded"particlesLoaded" :options"…

Spring系列-02-Bean类型, 作用域, 实例化, 生命周期

Bean类型, 作用域, 实例化, 生命周期 Bean类型 在 SpringFramework 中,对于 Bean 的类型,一般有两种设计: 普通BeanFactoryBean 普通Bean 三种方式 Component注解配置类Beanxml <bean> Component public class Child {}Bean public Child child() {return new Ch…

Postgresql源码(134)优化器针对volatile函数的排序优化分析

相关 《Postgresql源码&#xff08;133&#xff09;优化器动态规划生成连接路径的实例分析》 上一篇对路径的生成进行了分析&#xff0c;通过make_one_rel最终拿到了一个带着路径的RelOptInfo。本篇针对带volatile函数的排序场景继续分析subquery_planner的后续流程。 subquer…

国内信创web中间件生态

国内信创web中间件生态 东方通 官网https://www.tongtech.com/pctype/25.html 宝蓝德 官网https://www.bessystem.com/product/0ad9b8c4d6af462b8d15723a5f25a87d/info?p101 金蝶天燕 官网 https://www.apusic.com/list-117.html 中创 官网http://www.inforbus.com…

小程序使用vant组件库

一:下载组件库 在小程序内npm下载的包 vant组件库官网:快速上手 - Vant Weapp (youzan.github.io) 1)首先有有package.json文件,没有的话则先初始化 即使通过package.json去下载包,也需要有,可以观察下载的包. 2)下载包 3)构建npm包 下载包之后存储在node_modules内,但是我们…

详谈 Java中的list.forEach()和list.stream().forEach() 异同点

涉及的文章链接&#xff1a;ArrayList 循环Remove遇到的坑 一、想总结本篇博客的原因 在日常开发中&#xff0c;需要对集合数据进行或多或少的赋值修改&#xff0c;那么循环赋值或者做一些处理就是最常见的一种操作了&#xff0c;但是用习惯了stream流&#xff0c;所以在循环的…

HQChart使用教程99-K线窗口设置上下间距

HQChart使用教程99-K线窗口设置上下预留间距 指标窗口布局说明设置预留间距数据结构通过Setoption设置通过ChangeIndex设置 HQChart代码地址 指标窗口布局说明 顶部预留间距(3)和底部预留间距(5) 这个部分是算在Y轴坐标上的 设置预留间距 数据结构 HorizontalReserved&#…

Python + adb 实现打电话功能

前言 其实很多年前写过一篇python打电话的功能&#xff0c;链接如下&#xff1a; Python twilio 实现打电话和发短信功能_自动发短信代码-CSDN博客 今天由于工作需要&#xff0c;又用python写了个关于打电话的小工具&#xff0c;主要是通过ADB方式实现的 实现过程 1.先利用…

车机壁纸生成解决方案,定制化服务,满足个性化需求

在数字化与智能化浪潮的推动下&#xff0c;汽车内部设计已不再仅仅满足于基本功能的需求&#xff0c;更追求为用户带来前所未有的视觉享受与沉浸式体验。美摄科技&#xff0c;凭借其在图像生成与处理领域的深厚积累&#xff0c;推出了一款创新的车机壁纸生成解决方案&#xff0…

修改Windows系统hosts文件,解决GitHub国内访问速度慢甚至无法访问的问题

对国内大多数用户&#xff0c;GitHub的访问速度非常慢&#xff0c;甚至是打不开&#xff0c;无法访问。究其原因&#xff0c;多数是GitHub的CDN域名解析&#xff08;DNS&#xff09;遭到了污染或拦截。本文以Windows 10系统为例&#xff0c;通过修改本地hosts文件&#xff0c;解…