HiveSQL刷题

41、同时在线人数问题

现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间。

user_id
(用户id)
live_id
(直播间id)
in_datetime
(进入直播间的时间)
out_datetime
(离开直播间的时间)
10012021-12-1 19:30:002021-12-1 19:53:00
10022021-12-1 21:01:002021-12-1 22:00:00
10112021-12-1 19:05:002021-12-1 20:55:00

现要求统计各直播间最大同时在线人数,期望结果如下:

live_id
<int>
(直播id)
max_user_count
<int>
(最大人数)
14
23
32
select live_id,max(sum) max_user_count
from (select *,sum(user_change) over (partition bylive_idorder bytime1) sumfrom (select user_id,live_id,in_datetime time1,1           user_changefrom live_eventsunion allselect user_id,live_id,out_datetime time1,-1           user_changefrom live_events) t1) t2
group by live_id;

42、会话划分问题

现有页面浏览记录表(page_view_events)如下,表中有每个用户的每次页面访问记录。

user_idpage_idview_timestamp
100home1659950435
100good_search1659950446
100good_list1659950457
100home1659950541
100good_detail1659950552
100cart1659950563
101home1659950435
101good_search1659950446
101good_list1659950457
101home1659950541
101good_detail1659950552
101cart1659950563
102home1659950435
102good_search1659950446
102good_list1659950457
103home1659950541
103good_detail1659950552
103cart1659950563

规定若同一用户的相邻两次访问记录时间间隔小于60s,则认为两次浏览记录属于同一会话。现有如下需求,为属于同一会话的访问记录增加一个相同的会话id字段,会话id格式为"user_id-number",其中number从1开始,用于区分同一用户的不同会话,期望结果如下:

user_id
<int>
(用户id)
page_id
<string>
(页面id)
view_timestamp
<bigint>
(浏览时间戳)
session_id
<string>
(会话id)
100home1659950435100-1
100good_search1659950446100-1
100good_list1659950457100-1
100home1659950541100-2
100good_detail1659950552100-2
100cart1659950563100-2
101home1659950435101-1
101good_search1659950446101-1
101good_list1659950457101-1
101home1659950541101-2
101good_detail1659950552101-2
101cart1659950563101-2
102home1659950435102-1
102good_search1659950446102-1
102good_list1659950457102-1
103home1659950541103-1
103good_detail1659950552103-1
select user_id,page_id,view_timestamp,concat(user_id,'-',sum(flag) over (partition byuser_idorder byview_timestamp)) session_id
from (select *,`if`(view_timestamp - lag < 60, 0, 1) flagfrom (select *,lag(view_timestamp, 1, 0) over (partition byuser_idorder byview_timestamp) lagfrom page_view_events) t1) t2;

 43、间断连续登录用户问题

现有各用户的登录记录表(login_events)如下,表中每行数据表达的信息是一个用户何时登录了平台。

user_idlogin_datetime
1002021-12-01 19:00:00
1002021-12-01 19:30:00
1002021-12-02 21:01:00

现要求统计各用户最长的连续登录天数,间断一天也算作连续,例如:一个用户在1,3,5,6登录,则视为连续6天登录。期望结果如下:

user_id
<int>
(用户id)
max_day_count
<int>
(最大连续天数)
1003
1016
1023
1043
1051
select user_id,max(datediff) max_day_count
from (select user_id,sum,datediff(max(login_date), min(login_date)) + 1 datedifffrom (select *,sum(flag) over (partition byuser_idorder bylogin_date) sumfrom (select *,`if`(datediff(login_date, laglogin_date) > 2, 1, 0) flagfrom (select *,lag(login_date, 1, '1970-01-01') over (partition byuser_idorder bylogin_date) laglogin_datefrom (select user_id,date_format(login_datetime, 'yyyy-MM-dd') login_datefrom login_eventsgroup by user_id,date_format(login_datetime, 'yyyy-MM-dd')) t1) t2) t3) t4group by user_id,sum) t5
group by user_id;

 44、日期交叉问题

现有各品牌优惠周期表(promotion_info)如下,其记录了每个品牌的每个优惠活动的周期,其中同一品牌的不同优惠活动的周期可能会有交叉。

promotion_idbrandstart_dateend_date
1oppo2021-06-052021-06-09
2oppo2021-06-112021-06-21
3vivo2021-06-052021-06-15

现要求统计每个品牌的优惠总天数,若某个品牌在同一天有多个优惠活动,则只按一天计算。期望结果如下:

brand
<string>
(品牌)
promotion_day_count
<int>
(优惠天数)
vivo17
oppo16
redmi22
huawei22
select brand,sum(day_count) promotion_day_count
from (select *,casewhen start_date > maxend_date then datediff(end_date, start_date) + 1when end_date > maxend_date then datediff(end_date, maxend_date)else 0end day_countfrom (select *,nvl(max(end_date) over (partition bybrandorder bystart_date rows between unbounded precedingand 1 preceding),'1970-01-01') maxend_datefrom promotion_info) t1) t2
group by brand;

 45、复购率问题

现有电商订单表(order_detail)如下。

order_id
(订单id)
user_id
(用户id)
product_id
(商品id)
price
(售价)
cnt
(数量)
order_date
(下单时间)
111500012022-01-01
213550012022-01-02
3173522022-02-01
422380032022-03-03

注:复购率指用户在一段时间内对某商品的重复购买比例,复购率越大,则反映出消费者对品牌的忠诚度就越高,也叫回头率

此处我们定义:某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数

近90天指包含最大日期(以订单详情表(order_detail)中最后的日期)在内的近90天。结果中复购率保留2位小数,并按复购率倒序、商品ID升序排序。

期望结果如下:

product_id
<int>
(商品id)
crp
<decimal(16,2)>
(复购率)
31.00
91.00
80.50
50.33
70.25
10.00
20.00
60.00
select product_id,cast(count(`if`(user_count >= 2, 1, null)) / count(1) as decimal(16, 2)) cpr
from (select product_id,user_id,count(1) user_countfrom (select *,max(order_date) over () max_order_datefrom order_detail) t1where order_date >= date_sub(max_order_date, 90)group by product_id, user_id) t2
group by product_id
order by cpr desc, product_id;

 46、出勤率问题

现有用户出勤表(user_login)如下。

user_id
(用户id)
course_id
(课程id)
login_in
(登录时间)
login_out
(登出时间)
112022-06-02 09:08:242022-06-02 10:09:36
112022-06-02 11:07:242022-06-02 11:44:21
122022-06-02 13:50:242022-06-02 14:21:50
222022-06-02 13:50:102022-06-02 15:30:20

课程报名表(course_apply)如下。

course_id
(课程id)
course_name
(课程名称)
user_id
(用户id)
1java[1,2,3,4,5,6]
2大数据[1,2,3,6]
3前端[2,3,4,5]

注:出勤率指用户看直播时间超过40分钟,求出每个课程的出勤率(结果保留两位小数)。

期望结果如下:

course_id
<int>
(课程id)
adr
<decimal(16,2)>
(出勤率)
10.33
20.50
30.25
select t3.course_id,cast(user_count / size(ca.user_id) as decimal(16, 2)) adr
from (select course_id,count(1) user_countfrom (select course_id,user_id,sum(time1) sum_timefrom (select user_id, course_id, unix_timestamp(login_out) - unix_timestamp(login_in) time1from user_login) t1group by course_id, user_id) t2where sum_time > 40 * 60group by course_id) t3join course_apply caon ca.course_id = t3.course_id;

 47、打车问题

现有用户下单表(get_car_record)如下。

uid
(用户id)
city
(城市)
event_time
(下单时间)
end_time
(结束时间:取消或者接单)
order_id
(订单id)
107北京2021-09-20 11:00:002021-09-20 11:00:309017
108北京2021-09-20 21:00:002021-09-20 21:00:409008
108北京2021-09-20 18:59:302021-09-20 19:01:009018
102北京2021-09-21 08:59:002021-09-21 09:01:009002

司机订单信息表(get_car_order)如下。

order_id
(课程id)
uid
(用户id)
driver_id
(用户id)
order_time
(接单时间)
start_time
(开始时间)
finish_time
(结束时间)
fare
(费用)
grade
(评分)
90171072132021-09-20 11:00:302021-09-20 11:02:102021-09-20 11:31:00385
90081082042021-09-20 21:00:402021-09-20 21:03:002021-09-20 21:31:00384
90181082142021-09-20 19:01:002021-09-20 19:04:502021-09-20 19:21:00385

统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间。全部以event_time-开始打车时间为时段划分依据,平均等待接单时间和平均调度时间均保留2位小数,平均调度时间仅计算完成了的订单,结果按叫车量升序排序。

注:不同时段定义:早高峰 [07:00:00 , 09:00:00)、工作时间 [09:00:00 , 17:00:00)、晚高峰 [17:00:00 ,20:00:00)、休息时间 [20:00:00 , 07:00:00) 时间区间左闭右开(即7:00:00算作早高峰,而9:00:00不算做早高峰)

从开始打车到司机接单为等待接单时间,从司机接单到上车为调度时间

期望结果如下:

period
<string>
(时段)
get_car_num
<int>
(叫车量)
wait_time
<decimal(16,2)>
(等待时长)
dispatch_time
<decimal(16,2)>
(调度时长)
工作时间10.501.67
休息时间10.672.33
晚高峰32.067.28
早高峰42.218.00
select period,count(1)                                                  get_car_num,cast(avg(end_time - event_time) / 60 as decimal(16, 2))   wait_time,cast(avg(start_time - order_time) / 60 as decimal(16, 2)) dispatch_time
from (select unix_timestamp(event_time) event_time,unix_timestamp(end_time)   end_time,unix_timestamp(order_time) order_time,unix_timestamp(start_time) start_time,casewhen hour(event_time) between 7 and 8 then '早高峰'when hour(event_time) between 9 and 16 then '工作时间'when hour(event_time) between 17 and 19 then '晚高峰'else '休息时间'end                    periodfrom get_car_record gcrleft join get_car_order gcoon gcr.order_id = gco.order_idwhere `dayofweek`(event_time) between 2 and 6) t1
group by period;

 48、排列问题

现有球队表(team)如下。

team_name
(球队名称)
湖人
骑士
灰熊
勇士

拿到所有球队比赛的组合 每个队只比一次

期望结果如下:

team_name_1
<string>
(队名)
team_name_2
<string>
(队名)
勇士湖人
湖人骑士
灰熊骑士
勇士骑士
湖人灰熊
勇士灰熊
select t1.team_name team_name_1, t2.team_name team_name_2
from team t1join team t2
where t1.team_name < t2.team_name;

 49、视频热度问题

现有用户视频表(user_video_log)如下。

uid
(球队名称)
video_id
(视频id)
start_time
(开始时间)
end_time
(结束时间)
if_like
(是否点赞)
if_retweet
(是否喜欢)
comment_id
(评论id)
10120012021-09-24 10:00:002021-09-24 10:00:2010null
10520022021-09-25 11:00:002021-09-25 11:00:3001null
10220022021-09-25 11:00:002021-09-25 11:00:3011null
10120022021-09-26 11:00:002021-09-26 11:00:3001null

视频信息表(video_info) 如下:

video_id
(视频id)
author
(作者id)
tag
(标签)
duration
(视频时长)
2001901旅游30
2002901旅游60
2003902影视90
2004902美女90

找出近一个月发布的视频中热度最高的top3视频。

注:热度=(a*视频完播率+b*点赞数+c*评论数+d*转发数)*新鲜度;

新鲜度=1/(最近无播放天数+1);

当前配置的参数a,b,c,d分别为100、5、3、2。

最近播放日期以 end_time-结束观看时间 为准,假设为T,则最近一个月按 [T-29, T] 闭区间统计。

当天日期使用视频中最大的end_time

结果中热度保留为整数,并按热度降序排序。

期望结果如下:

video_id
<int>
(视频id)
heat
<decimal(16,2)>
(热度)
200280.36
200120.33
select video_id,cast(ceil((100 * wb + 5 * dz + 3 * pl + 2 * zf) * 1) as decimal(16, 1)) heat
from (select video_id,sum(wanbo) / count(1) wb,sum(if_like)          dz,count(comment_id)     pl,sum(if_retweet)       zf,min(datediff_time)    zjfrom (select uvl.video_id,if_like,comment_id,if_retweet,datediff(max(end_time) over (), end_time)                                     datediff_time,`if`(unix_timestamp(end_time) - unix_timestamp(start_time) >= duration, 1, 0) wanbofrom user_video_log uvljoin video_info vion uvl.video_id = vi.video_id) t1group by video_id) t2;

50、员工在职人数问题

现有用户表(emp)如下。

id
(员工id)
en_dt
(入职日期)
start_time
(离职日期)
10012020-01-02null
10022020-01-022020-03-05
10032020-02-022020-02-15
10042020-02-122020-03-08

日历表(cal) 如下:

dt
(日期)
2020-01-01
2020-01-02
2020-01-03
2020-01-04

统计2020年每个月实际在职员工数量(只统计2020-03-31之前),如果1个月在职天数只有1天,数量计算方式:1/当月天数。

如果一个月只有一天的话,只算30分之1个人

期望结果如下:

mnt
<int>
(月份)
ps
<decimal(16,2)>
(在职人数)
11.94
23.62
32.23
with t1 as (select id,en_dt,nvl(le_dt, '2020-03-31') le_dt,month(en_dt) + pos       monfrom emplateral view posexplode(split(repeat('a', month(nvl(le_dt, '2020-03-31')) - month(en_dt)),'a')) tbl as pos, val),t2 as (select month(dt) mon,max(dt)   max_date,min(dt)   min_datefrom calgroup by month(dt))
select mon                              mth,cast(sum(zai) as decimal(16, 2)) ps
from (select t1.mon,(datediff(`if`(le_dt > max_date, max_date, le_dt), `if`(en_dt > min_date, en_dt, min_date)) + 1) /(datediff(max_date, min_date) + 1) zaifrom t1join t2on t1.mon = t2.mon) t3
group by mon;

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web自动化框架:selenium学习使用操作大全(Python版)

目录 一、浏览器驱动下载二、selenium-python安装&#xff08;打开网站、操作元素&#xff09;三、网页解析&#xff08;HTML、xpath&#xff09;四、selenium基本操作1、元素定位八种方法2、元素动态定位3、iframe切换4、填充表单_填充文本框5、填充表单_单选按钮6、填充表单_…

山海优选卷轴模式源码实例分享

山海优选通过与绿色有机产品供应商和生产商的合作&#xff0c;建立起稳定的供应链关系&#xff0c;确保产品的绿色、有机、健康。通过产品认证和检测&#xff0c;为会员提供可信赖的绿色产品。积分激励机制设计 山海优选引入“绿色积分”机制&#xff0c;通过会员购买产品、参与…

【Java Web】用拦截器的方式获取用户信息

流程&#xff1a;从cookie中获取凭证&#xff0c;根据凭证查询用户&#xff0c;并在本次请求中持有用户&#xff0c;在视图模板上显示登录用户的信息。 1. 定义拦截器 package com.nowcoder.community.controller.Interceptor;import com.nowcoder.community.entity.LoginTic…

MyBatis-Plus的公共字段自动填充

文章目录 1. 在实体类的相应属性上添加TableField注解2. 自定义元数据对象处理器3. 为了解决对象处理器MyMetaObjecthandler 获取不到外界数据的情况 1. 在实体类的相应属性上添加TableField注解 package com.itheima.reggie.entity;import com.baomidou.mybatisplus.annotati…

docker 搭建私有仓库和制作镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1.1 启动mysql镜像 1.2 启动owncloud镜像 1.3 浏览器访问 1.4 总结 2、安装搭建私有仓库 Harbor 2.1 下载docker-compose并赋予执行权限 2.2 磁盘挂载&#xff0c;保存harbor 2.3 修改配置文件…

4G WiFi LoRa无线外夹式超声波管道流量计MQTT/http协议 json数据说明

ip&#xff1a;114.128.112.131 port&#xff1a;1883 uname&#xff1a;scwl_flowmeter pwd&#xff1a;b123 topic&#xff1a;iot/data/scwlflowmeter { “deviceId”:“设备序列号”, “flow”:“瞬时流量&#xff08;浮点数&#xff09;”, “heatFlow”:“瞬时热流量&am…

Docker技术--Docker容器管理

1.Docker容器相关的指令(单个容器操) 我们之前在Docker中部署了一个实际应用的案例wordpress,其中使用到了一些相关于容器的指令,那么下面我们一起来总结使用。 Docker指令的语法规则如下所示: Docker + 命令关键字 [+参数选项] -1类:关闭、开启、重启、开启自启 systemct…

mysql问题处理大全

mysql问题处理大全 一&#xff1a;mysql中文乱码问题&#xff1a; 解决一次问题 show variables like “%chara%” character_set_client 为客户端编码方式&#xff1b; character_set_connection为建立连接使用的编码方式&#xff1b; character_set_database为数据库的编码…

Web 自动化神器 TestCafe—页面高级操作篇

♥ 前 言 在【Web 自动化神器 TestCafe — 页面基本操作篇】这篇文章中我们介绍了TestCafe页面交互的一些基本使用 Web 自动化神器 TestCafe — 页面基本操作篇 这篇文章接着上一篇来给大家介绍一下 TestCafe 页面交互的一些高级操作。 一、鼠标拖拽 鼠标拖拽鼠标拖拽 …

枚举分片容错性动态扩展

枚举分片之前的《mycat字符串枚举分片示例》中已经介绍过。 使用这种分片策略之后碰到了一个问题&#xff1a; 场景&#xff1a; 使用连锁店的店铺编号枚举分片&#xff08;第1至第100分布店分在第一个分片&#xff0c;第101至第250分店&#xff09;&#xff0c;全国的连锁店会…

JavaScript常见的运算符

一、运算符和运算元 1.认识运算符 在小学的时候我们就学习了各种运算符&#xff0c;比如加号 、乘号 *、减号 - 、除号/ 几乎所有的编程语言都有各种各样的运算符(也被称之为操作符&#xff0c;operators) 初次接触这些运算符, 你会感觉种类繁多, 难以记忆.但是并不需要特别…

Kotlin判断null比较let布尔值Boolean

Kotlin判断null比较let布尔值Boolean class MyData {val count: Int? 2023val number: Int? null }fun main(args: Array<String>) {val data MyData()val year 2022if (data.count ! null) {if (data.count > year) {println("data.count ! null")}}…

CSS 盒子模型

前言 盒子模型-组成 CSS盒子模型是一种用来描述元素在页面布局中占据空间的模型。它将每个元素看作由内容区域、内边距、边框和外边距组成的一个矩形框。 盒子模型的组成部分包括&#xff1a; 内容区域&#xff08;Content&#xff09;&#xff1a;显示元素的实际内容&#xf…

无涯教程-Android - Frame Layout函数

Frame Layout 旨在遮挡屏幕上的某个区域以显示单个项目&#xff0c;通常&#xff0c;应使用FrameLayout来保存单个子视图&#xff0c;因为在子视图彼此不重叠的情况下&#xff0c;难以以可扩展到不同屏幕尺寸的方式组织子视图。 不过&#xff0c;您可以使用android:layout_grav…

Axure RP 8.1.0.3400(原型设计工具)

Axure RP 8是一款原型设计工具&#xff0c;它提供了丰富的功能和工具&#xff0c;帮助用户创建高质量的网页、移动应用和桌面软件原型。以下是Axure RP 8的一些特色介绍&#xff1a; 强大的交互设计&#xff1a;Axure RP 8支持创建复杂的动画和过渡效果&#xff0c;让你的原型更…

2023 js逆向爬虫 有道翻译 代码

前置条件&#xff1a;nodejs环境、安装 crypto 和 python3环境 js.js文件&#xff1a; const crypto require("crypto")function decode(resp_data) {g_o ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHlg_n ydsecre…

微信短链跳转到小程序指定页面调试

首先说下背景&#xff1a;后端给了短链地址&#xff0c;但是无法跳转到指定页面。总是在小程序首页。指定的页面我们是h5页面。排查步骤如下&#xff1a; 1、通过快速URL Scheme 编译。上部普通编译 下拉找到此选项。 、 2、按照小程序的要求的URL Scheme输入。另外后端给的…

Redis7之介绍(一)

1. 是什么 Redis:REmote Dictionary Server(远程字典服务器&#xff09; Remote Dictionary Server( 远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、…

PlantUML文本绘制类图

记录下文本绘制类图的语法 参考 https://juejin.cn/post/6844903731293585421 类的UML表示 使用UML表示一个类&#xff0c;主要由三部分组成。类名、属性、方法。其中属性和方法的访问修饰符用 - 、# 、 表示 private、protected、public。 如图所示&#xff0c;表示A类有一个…

Unity3D 2021 使用 SharpZipLib 遇到的安卓打包 I18N 相关问题

在 Unity3D 中&#xff0c;使用 ICSharpCode.SharpZipLib.dll 来做压缩和解压缩&#xff0c;但打包安卓后遇到问题&#xff0c;原因是字符编码程序集被裁减掉了导致。 根据网上搜索&#xff0c;将 UnityEditor 对应目录下的 I18N开头的&#xff0c;比如 I18N.CJK.dll 等系列文…