提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、SQL177 国庆期间近7日日均取消订单量

1.数据源和场景说明

2.滑动窗口解题

3.笛卡尔积解题

二、SQL160 国庆期间每类视频点赞量和转发量

1.数据源和场景说明

​编辑

2.滑动窗口函数解题

3.笛卡尔积解题


前言

在牛客网刷大厂sql题目的时候,发现“国庆头三天近一周的数据查询题目”有出现不止一次,感觉思维还是很重要,在周末就打算总结下牛客网里类似的两道题目,写一篇文章以便自己复习。


一、SQL177 国庆期间近7日日均取消订单量

1.数据源和场景说明

场景逻辑说明

  • 用户提交打车请求后,在用户打车记录表生成一条打车记录,order_id-订单号设为null

  • 当有司机接单时,在打车订单表生成一条订单,填充order_time-接单时间及其左边的字段,start_time-开始计费的上车时间及其右边的字段全部为null,并把order_id-订单号order_time-接单时间end_time-打车结束时间)写入打车记录表;若一直无司机接单,超时或中途用户主动取消打车,则记录end_time-打车结束时间

  • 若乘客上车前,乘客或司机点击取消订单,会将打车订单表对应订单的finish_time-订单完成时间填充为取消时间,其余字段设为null

  • 当司机接上乘客时,填充订单表中该start_time-开始计费的上车时间

  • 当订单完成时填充订单完成时间、里程数、费用;评分设为null,在用户给司机打1~5星评价后填充。

问题:请统计国庆头3天里,每天的近7日日均订单完成量和日均订单取消量,按日期升序排序。结果保留2位小数。

2.滑动窗口解题

思路:滑动窗口函数提取国庆三天中每一天假期的前六天数据累计求和但数据源里面的数据是每天每个时间的,所以每一天的数据有好几条,所以先要聚合然后利用聚合后的子查询进行滑动窗口函数累计求和。注:此处只需计算司机取消订单的数量,所以只需要用order这个表就可以。

select dt,
round(cnt4/7,2) finish_num_7d,
round((cnt3-cnt4)/7,2) cancel_num_7d
from
(
select dt,
sum(cnt1) over(order by dt rows between 6 preceding and current row) cnt3,
sum(cnt2) over(order by dt rows between 6 preceding and current row) cnt4
from
(
select date(order_time) dt,count(order_id) cnt1,count(start_time) cnt2
#cnt1各天总订单,cnt2各天完成订单
from tb_get_car_order
group by date(order_time)
) t1
) t2
where datediff('2021-10-3',dt) between 0 and 2

知识点:

1.提取国庆三天可以用datediff('2021-10-3',dt) between 0 and 2,用 date_formate(dt,'%Y-%m-%d') between '2021-10-1' and '2021-10-3' 会报错, 直接dt between '2021-10-1' and '2021-10-3'就可以,不需要套一层格式化。

2.滑动窗口逻辑,此处不用分区。

3.笛卡尔积解题

思路:先查询出国庆三天的日期数据与原数据链接

select t1.dt,
round(count(od.start_time)/7,2) finish_num_7d,
round((count(od.order_time)-count(od.start_time))/7,2) cancel_num_7d
from
(
select distinct date(order_time) dt
from tb_get_car_order
where datediff('2021-10-3',date(order_time)) between 0 and 2
) t1
join tb_get_car_order od
on datediff(t1.dt,od.order_time) between 0 and 6
group by t1.dt
order by t1.dt

知识点:

1.链接条件就只有datediff(t1.dt,od.order_time) between 0 and 6,即使order_time包括时间,也是可以用datediff。

2.用timestampdiff(day,od.order_time,t1.dt) between 0 and 6会计算的不准确,timestampdiff(day,od.order_time,t1.dt) between 0 and 5结果就和datediff(t1.dt,od.order_time) between 0 and 6。

因为timestampdiff

3.制造日期列和原表链接,国庆三天每天都会对应好多条数据。

二、SQL160 国庆期间每类视频点赞量和转发量

1.数据源和场景说明

问题:统计2021年国庆头3天每类视频每天的近一周总点赞量和一周内最大单天转发量,结果按视频类别降序、日期升序排序。假设数据库中数据足够多,至少每个类别下国庆头3天及之前一周的每天都有播放记录。

2.滑动窗口函数解题

select tag,dt,sum_like_cnt_7d,max_retweet_cnt_7d
from
(
select tag,dt,
max(retweet)over(partition by tag order by dt rows between 6 preceding and current row) max_retweet_cnt_7d,
sum(likes)over(partition by tag order by dt rows between 6 preceding and current row) sum_like_cnt_7d
from
(
select info.tag,date(log.start_time) dt,sum(if_retweet) retweet,sum(log.if_like) likes
from tb_user_video_log log
join tb_video_info info
on log.video_id=info.video_id
group by date(log.start_time),info.tag
) t2
) t3
where dt between '2021-10-01' and '2021-10-03'

跟上一题的共同点就是都是在聚合后的情况下进行滑动窗口。

3.笛卡尔积解题

select t2.tag,t1.dt,sum(likes) sum_like_cnt_7d,
max(retweet) max_retweet_cnt_7d
from
(
select distinct date(start_time) dt
from tb_user_video_log
where datediff('2021-10-3',date(start_time)) between 0 and 2
) t1
left join
(
select info.tag,date(log.start_time) dt,sum(if_retweet) retweet,sum(log.if_like) likes
from tb_user_video_log log
join tb_video_info info
on log.video_id=info.video_id
group by date(log.start_time),info.tag
) t2
on datediff(t1.dt,t2.dt) between 0 and 6
group by t1.dt,t2.tag
order by t2.tag desc ,t1.dt

知识点:

1.datediff('2021-10-3',date(start_time))这个地方,如果有一个参数是具体日期,一定要加英文单引号‘’!

2.因为求“每天的近一周总点赞量”和“一周内最大单天转发量”。这两个的聚合条件不一样。“一周总点赞量”的聚合条件是国庆三天(t1.dt)。“一周内最大单天转发量”的聚合条件是每一天(t2.dt),所以需要对聚合条件是每一天进行子查询再链表再聚合条件是国庆三天。

3.制造日期列的表一定要distinct去重日期!!


总结

这类题目就两个方法,一个是滑动窗口函数进行累计,一个是笛卡尔积然后聚合运算。

关于mysql国庆头三天近一周的数据查询题目相关推荐

  1. mysql 查询近两周的记录_查询近一周、近两周的数据

    一.利用mysql函数TO_DAYS,通过该函数计算返回的是天数 示例:查询近一周的数据 select * from table where TO_DAYS(NOW()) - TO_DAYS(fiel ...

  2. 【 mysql基础(三)】约束和多表查询

    目录 1. 约束 1.1 概述 1.2 约束演示 1.3 外键约束 2. 多表查询 2.1 多表关系 2.2 多表查询概述 2.4 外连接 2.5 自连接 2.5.1 自连接查询 5.5.2 联合查询 ...

  3. mysql 删除的三种方法_mysql 删除表数据的三种方法

    先说那三个:drop.truncate.delete 1.drop 删除所有表结构和数据 drop table tableName: 2.truncate 删除表所有数据,不删除表结构,不能添加whe ...

  4. TCGA(三)--采用GDC API进行数据查询和获取

    TCGA的数据可以通过API访问, 每个数据都有对应的多个属性,比如文件id(file_id), 病人编号(case_id以及barcode),case_id 和file_id 都是采用的UUID进行 ...

  5. 题目:MySql数据查询题目(学生和课程成绩)

    1)     创建student和score表 2)     为student表和score表增加记录 3)     查询student表的所有记录 SELECT * from student 4)  ...

  6. mysql 查询姓张或者姓王_题目:MySql数据查询题目(学生和课程成绩)

    1)     创建student和score表 2)     为student表和score表增加记录 3)     查询student表的所有记录 SELECT * from student 4)  ...

  7. MySQL 国庆期间每类视频点赞量和转发量

    用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet comment_i ...

  8. mysql获取近几年、近几个月、近几天的数据

    mysql获取近几年.近几个月.近几周.近几天的数据 1.获取近几年的数据 SELECT * FROM 表名 WHERE 时间字段>DATE_SUB(CURDATE(), INTERVAL 年数 ...

  9. Java解决表格统计“近一日、近一周、近一月”数据的时间函数调用问题

    jar包:commons-lang3-3.3.2 日期处理类 :org.apache.commons.lang3.time.DateUtils ① "年"处理函数: public ...

最新文章

  1. Angew. Chem. Int. Ed. | 分子机器学习是合成化学的未来吗?
  2. 将Java程序变成可执行文件的一个简单方法
  3. CoreOS的Tectonic新发行版支持Kubernetes自我管理
  4. linux下面显示所有正在运行的线程
  5. python爬虫招聘-Python爬虫实战-抓取boss直聘招聘信息
  6. 鹅厂是如何使用 Git 的?看这!
  7. 【Tools】MarkDown教程(七)-Typora详细教程
  8. div文字自动扩充_文字资料扩充
  9. 谈一谈Http Request 与 Http Response
  10. php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
  11. google search console的使用
  12. Python正则表达式用法总结
  13. html自动识别循环列表元素,动态添加的元素,怎么遍历它们的功能及内容
  14. 【MySQL】sql语句中exists和in有何区别?
  15. 唐山师范学院计算机科学与技术地址,2021年唐山师范学院有几个校区,大一新生在哪个校区...
  16. 软件安装——在Vmware中安装CentOS7(转载)
  17. TurboMail邮件系统提醒广大用户小心DXXD勒索邮件
  18. jquery实现全选功能
  19. OSI七层网络协议(应用层:http协议、传输层:TCP协议、网络层:IP协议,数据链路层:ARP协议、网络下一跳,物理层:比特流)
  20. 从零开始学习html(十)CSS格式化排版——下

热门文章

  1. 使用pycharm开发Django2.2全过程(九)-ECharts的使用(绘制地图、散点图、饼图等)
  2. 等价矩阵、相似矩阵、合同矩阵
  3. 鼠标键盘共享工具Synergy常见问题
  4. Carbon 在 Laravel 中的简单使用
  5. 433/315无线接收芯片 XL520 射频芯片 规格书
  6. 泡面吧” “计蒜客” 挑战难题 第16题:爬楼梯
  7. 网易帐号通帮你一一列举邮箱注册过的所有网站
  8. STM32f103ZET6引脚通道(ADC和TIM)
  9. Json解析(Json集合,Json嵌套)
  10. 2022年总结 | 从初二学生到算法作者的蜕变之路