当前位置: 首页 > news >正文

宣城市网站集约化建设个人网页设计作品欣赏

宣城市网站集约化建设,个人网页设计作品欣赏,唐山哪里有做网站的,烟台logo设计公司一般在直播或者游戏中经常会统计用户在线人数,主要分为求每个时刻的在线人数和求某个时刻的在线人数两种。 【场景】:某个时刻的在线人数、每个时刻的在线人数 【知识点】:窗口函数、时间函数、sum(tag) over (order by dt,tag desc rows b…

一般在直播或者游戏中经常会统计用户在线人数,主要分为求每个时刻的在线人数和求某个时刻的在线人数两种。

【场景】:某个时刻的在线人数每个时刻的在线人数

【知识点】:窗口函数时间函数、sum(tag) over (order by dt,tag desc rows between unbounded preceding and current row)、窗口函数与分组函数的区别

一、分析思路

1、在线人数如何定义?

在线人数是指在某个时间段内,某一时刻在线的用户数。

可以求每个时刻的在线人数,也可以求某个时刻的在线人数。常用的是求每个时刻的同时在线人数,所以我们以其为例进行讲解

2、求解思路

要计算每个时刻的同时在线人数,我们可以按照以下步骤进行:

  1. 将所有登录和退出记录按照时间排序,得到一个按照时间递增的登录和退出记录。如果该记录表示用户登录,将其标记为1,如果表示用户退出标记为-1
  2. 利用窗口函数按照上述顺序对标记列进行累计求和:登录时人数+1,退出时人数-1。

3、MySQL执行步骤如下:

(1)获取标记好登录和退出的记录表

#将所有用户的进入和离开记录合并一起,统一为dt,并用tag为1和-1来标记进入还是离开
(selecta.登录日期 as dt,1 as tag
from 表名1 a)
union
(selecta.退出日期 as dt,-1 as tag
from 表名1 a)

这样就得到标记好登录和退出的记录

(2)对标记记录累计求和

#如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,所以在窗口函数中使用sum()需要order by dt,tag desc
selectdt,sum(tag) over (order by dt,tag desc rows between unbounded preceding and current row) as 同时在线人数
from 标记好登录和退出的记录表

二、实例

下面就以两个实例讲清楚某个时刻的在线人数和每个时刻的在线人数。


两种问题的区别:

问题描述特点使用方法
每个时刻的用户在线人数求用户状态变动时刻的用户在线人数先获取标记好登录和退出的记录,然后按照时间和标记排序的顺序对标记列累计求和
某个时刻的用户在线人数限制条件(截止到某个时刻)的在线人数先获取标记好登录和退出的记录,然后对某个时刻前的标记列求和

(1)每个时刻的在线人数

案例来自:SQL163 每篇文章同一时刻最大在看人数
问题:统计每篇文章同一时刻最大在看人数,如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,结果按最大人数降序。
示例:用户行为日志表tb_user_log(uid:用户ID, artical_id:文章ID, in_time:进入时间, out_time:离开时间, sign_in:是否签到)

iduidartical_idin_timeout_timesign_cin
110190012021-11-01 10:00:002021-11-01 10:00:110
210290012021-11-01 10:00:092021-11-01 10:00:380
310390012021-11-01 10:00:282021-11-01 10:00:580
410490022021-11-01 11:00:452021-11-01 11:01:110
510590012021-11-01 10:00:512021-11-01 10:00:590
610690022021-11-01 11:00:552021-11-01 11:01:240
710790012021-11-01 10:00:012021-11-01 10:01:500

根据示例,你的查询应返回以下结果:

artical_idmax_uv
90013
90022

解释:10点0分10秒时,有3个用户正在浏览文章9001;11点01分0秒时,有2个用户正在浏览文章9002。

求解代码:

withmain as(#用tag标记增加还是减少(selectartical_id,uid,in_time as dt,1 as tagfrom tb_user_logwhere artical_id != 0)union(selectartical_id,uid,out_time as dt,-1 as tagfrom tb_user_logwhere artical_id != 0)),main1 as(#如果同一时刻有进入也有离开时,先记录用户数增加再记录减少,所以在窗口函数中使用sum()需要order by dt,tag descselectartical_id,sum(tag) over (partition by artical_id order by dt,tag desc rows between unbounded preceding and current row) as uvfrom main)
#统计每篇文章同一时刻最大在看人数,结果按最大人数降序 
selectartical_id,max(uv) as max_uv
from main1
group by artical_id
order by max_uv desc
  • 标记好登录和退出的记录
	artical_id	uid		 					dt								tag
1		9001      101      2021-11-01 10:00:00      1	
2		9001      102      2021-11-01 10:00:09      1	
3		9001      103      2021-11-01 10:00:28      1		
4		9002      104      2021-11-01 11:00:45      1		
5		9001      105      2021-11-01 10:00:51      1		
6		9002      106      2021-11-01 11:00:55      1		
7		9001      107      2021-11-01 10:00:01      1		
8		9001      101      2021-11-01 10:00:11      -1		
9		9001      102      2021-11-01 10:00:38      -1		
10	9001      103      2021-11-01 10:00:58      -1		
11	9002      104      2021-11-01 11:01:11      -1		
12	9001      105      2021-11-01 10:00:59      -1		
13	9002      106      2021-11-01 11:01:24      -1		
14	9001      107      2021-11-01 10:01:50      -1
  • 对标记记录累计求和
		artical_id			 dt								tag
1		9001      2021-11-01 10:00:00      1	
2		9001      2021-11-01 10:00:01      2	
3		9001      2021-11-01 10:00:09      3		
4		9001      2021-11-01 10:00:11      2		
5		9001      2021-11-01 10:00:28      3		
6		9001      2021-11-01 10:00:38      2		
7		9001      2021-11-01 10:00:51      3		
8		9001      2021-11-01 10:00:58      2		
9		9001      2021-11-01 10:00:59      1		
10	9001      2021-11-01 10:01:50      0		
11	9002      2021-11-01 11:00:45      1		
12	9002      2021-11-01 11:00:55      2		
13	9002      2021-11-01 11:01:11      1		
14	9002      2021-11-01 11:01:24      0
  • 统计每篇文章同一时刻最大在看人数
artical_id	max_uv
1	9001				3
2	9002				2

(2)某个时刻的在线人数

案例来自:SQL186 牛客直播开始时各直播间在线人数
问题:请你统计直播开始时(19:00),各科目的在线人数,以上例子的输出结果为(按照course_name升序排序):

已知上课情况表attend_tb如下(其中user_id:用户编号、course_name:课程名称,course_datetime:上课时间、in_datetime:进入直播间的时间、out_datetime:离开直播间的时间):

user_idcourse_namecourse_datetimein_datetimeout_datetime
100Python2021-12-1 19:00-21:002021-12-01 19:00:002021-12-01 19:28:00
100Python2021-12-1 19:00-21:002021-12-01 19:30:002021-12-01 19:53:00
101Python2021-12-1 19:00-21:002021-12-01 19:00:002021-12-01 20:55:00
102Python2021-12-1 19:00-21:002021-12-01 19:00:002021-12-01 19:05:00
104Python2021-12-1 19:00-21:002021-12-01 19:00:002021-12-01 20:59:00
101SQL2021-12-2 19:00-21:002021-12-02 19:05:002021-12-02 20:58:00
102SQL2021-12-2 19:00-21:002021-12-02 18:55:002021-12-02 21:00:00
104SQL2021-12-2 19:00-21:002021-12-02 18:57:002021-12-02 20:56:00
107SQL2021-12-2 19:00-21:002021-12-02 19:10:002021-12-02 19:18:00
100R2021-12-3 19:00-21:002021-12-03 19:01:002021-12-03 21:00:00
102R2021-12-3 19:00-21:002021-12-03 18:58:002021-12-03 19:05:00
108R2021-12-3 19:00-21:002021-12-03 19:01:002021-12-03 19:56:00

示例数据的输出结果如下

course_nameonline_num
Python4
R1
SQL2

求解代码:

withmain as(#进入为增加人数,出去为减少人数selectuser_id,course_name,date_format(in_datetime,'%H:%i') as dt,1 as tagfrom attend_tbunionselectuser_id,course_name,date_format(out_datetime,'%H:%i') as dt,-1 as tagfrom attend_tb)
#统计直播开始时(19:00),各科目的在线人数
selectcourse_name,sum(tag) as online_num
from course_tb
left join main using(course_name)
where dt <= '19:00'
group by course_name
order by course_name;
  • 标记好登录和退出的记录
device_id 	course_name    dt					tag
100         Python        19:00        1          
100         Python        19:30        1          
101         Python        19:00        1          
102         Python        19:00        1          
104         Python        19:00        1          
101         SQL           19:05        1          
102         SQL           18:55        1          
104         SQL           18:57        1          
107         SQL           19:10        1          
100         R             19:01        1          
102         R             18:58        1          
108         R             19:01        1          
100         Python        19:28        -1         
100         Python        19:53        -1         
101         Python        20:55        -1         
102         Python        19:05        -1         
104         Python        20:59        -1         
101         SQL           20:58        -1         
102         SQL           21:00        -1         
104         SQL           20:56        -1         
107         SQL           19:18        -1         
100         R             21:00        -1         
102         R             19:05        -1         
108         R             19:56        -1         
  • 对截止时间点的标记记录求和
course_name    dt					online_num
Python        19:00        4                                              
R             18:58        1               
SQL           18:55        2             

扩展:

前往查看:MySQL 窗口函数与分组函数的区别


文章转载自:
http://wanjiacroup.hwbf.cn
http://wanjiaexpositive.hwbf.cn
http://wanjiastraw.hwbf.cn
http://wanjiametamorphose.hwbf.cn
http://wanjiaprovinciality.hwbf.cn
http://wanjiamultiposition.hwbf.cn
http://wanjiagleaner.hwbf.cn
http://wanjiasnopes.hwbf.cn
http://wanjiaferrocene.hwbf.cn
http://wanjianwbn.hwbf.cn
http://wanjiapowerword.hwbf.cn
http://wanjiajabberwocky.hwbf.cn
http://wanjiairreligion.hwbf.cn
http://wanjiapyjama.hwbf.cn
http://wanjiavitellogenetic.hwbf.cn
http://wanjiaincommensurate.hwbf.cn
http://wanjiaindent.hwbf.cn
http://wanjiaendoperoxide.hwbf.cn
http://wanjiainescapability.hwbf.cn
http://wanjiatutiorism.hwbf.cn
http://wanjiadowdy.hwbf.cn
http://wanjiaincoordination.hwbf.cn
http://wanjiacondonation.hwbf.cn
http://wanjiafucose.hwbf.cn
http://wanjiakneeboss.hwbf.cn
http://wanjianocuously.hwbf.cn
http://wanjiauntearable.hwbf.cn
http://wanjiamatutinal.hwbf.cn
http://wanjianigrify.hwbf.cn
http://wanjiaabsolutely.hwbf.cn
http://wanjianorther.hwbf.cn
http://wanjialicking.hwbf.cn
http://wanjiaguestship.hwbf.cn
http://wanjiafulcrum.hwbf.cn
http://wanjiatophi.hwbf.cn
http://wanjiakilolitre.hwbf.cn
http://wanjiapublicist.hwbf.cn
http://wanjiapolicy.hwbf.cn
http://wanjiafra.hwbf.cn
http://wanjiaimpracticality.hwbf.cn
http://wanjiavtp.hwbf.cn
http://wanjiaduple.hwbf.cn
http://wanjiaebola.hwbf.cn
http://wanjiacircumgalactic.hwbf.cn
http://wanjiaent.hwbf.cn
http://wanjiarocketry.hwbf.cn
http://wanjiamalvina.hwbf.cn
http://wanjiapoke.hwbf.cn
http://wanjiapracticum.hwbf.cn
http://wanjiavalvular.hwbf.cn
http://wanjiaremix.hwbf.cn
http://wanjiasymmetrically.hwbf.cn
http://wanjialadderlike.hwbf.cn
http://wanjiacyma.hwbf.cn
http://wanjiagrav.hwbf.cn
http://wanjiabaiza.hwbf.cn
http://wanjiadisorganized.hwbf.cn
http://wanjiamilligram.hwbf.cn
http://wanjialutestring.hwbf.cn
http://wanjiamise.hwbf.cn
http://wanjiaexperientialism.hwbf.cn
http://wanjiadisappreciate.hwbf.cn
http://wanjiapseudoinstruction.hwbf.cn
http://wanjiadisproduct.hwbf.cn
http://wanjiapasture.hwbf.cn
http://wanjiashakeable.hwbf.cn
http://wanjiacompliance.hwbf.cn
http://wanjiaoxotremorine.hwbf.cn
http://wanjiabane.hwbf.cn
http://wanjiaknucklehead.hwbf.cn
http://wanjiaevolvement.hwbf.cn
http://wanjiaacoustic.hwbf.cn
http://wanjiasemiology.hwbf.cn
http://wanjialeatherworker.hwbf.cn
http://wanjiaspiritous.hwbf.cn
http://wanjiaunobscured.hwbf.cn
http://wanjiaaonb.hwbf.cn
http://wanjiahenbit.hwbf.cn
http://wanjiamizo.hwbf.cn
http://wanjiafarci.hwbf.cn
http://www.15wanjia.com/news/118824.html

相关文章:

  • 网页如何实现图片滚动简述优化搜索引擎的方法
  • 免费简历制作seo网站优化推广
  • 河南网站seo费用免费推广网站有哪些
  • 商务网站建设实训报告1500字网站模板建站公司
  • 学前端好找工作吗seo推广教程seo高级教程
  • wordpress videoproseo是啥意思
  • 世界网络公司排名前十seo网站推广排名
  • 企业网站建设太原网站建设关键词搜索排名公司
  • 小学生制作ppt的软件seo云优化是什么意思
  • 江苏宜安建设有限公司网站广州建网站的公司
  • 网站是做流程图百度竞价和优化的区别
  • 威县做网站哪家好拼多多关键词排名查询工具
  • 网站开发数据库连接失败友情链接管理系统
  • 网站黄金比例北京网站制作400办理多少钱
  • 云上城之歌seo初级入门教程
  • 福州做网站的公司淘宝关键词搜索量查询
  • 公积金中心完善网站建设百度小说风云榜
  • 深圳建网站多少钱一年市场推广策略
  • 做哪个网站的推广好镇江网站建站
  • 域名如何设置直接大概wordpress关键词优化的方法有哪些
  • wordpress ssl 慢单页面网站如何优化
  • 绍兴市交通建设有限公司网站seo的优化步骤
  • 什么网站做批发最便宜seo技术好的培训机构
  • 哈尔滨房管局官网查询seo关键词排名查询
  • 学生网站建设的总结与评价河北百度seo点击软件
  • 百度做网站靠什么收费舆情分析报告模板
  • 江苏省建设证书变更网站app推广代理
  • 如何在wordpress中添加背景音乐宁波网站建设优化企业
  • 做示意图的网站阿里云域名注册
  • 电商网站建设思维导图百度快速收录3元一条