SQL进阶技巧:统计各时段观看直播的人数

ops/2024/10/19 1:52:20/

目录

0 需求描述

1 数据准备

2 问题分析

3 小结

如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:

数字化建设通关指南

专栏 原价99,现在活动价39.9,十一国庆后将上升至59.9,最后一波需要的赶紧冲,最终按照阶梯式增长,直到恢复原价。


0 需求描述

现在有一张A表,里面包含当天用户观看直播的记录,需求:统计每个时间段内对应的观看直播的人数

表A

user_idstart_timeend_time
10012024-06-06 12:05:002024-06-06 13:10:00
10022024-06-06 11:05:002024-06-06 13:10:00

1 数据准备

sql">create table a as(select stack(2,1001, '2024-06-06 12:05:00', '2024-06-06 13:10:00',1002, '2024-06-06 11:05:00', '2024-06-06 13:10:00') as (user_id, start_time, end_time));

2 问题分析

本题主要考察拉链表流水化的思维方式,即如何将拉链表转换成对应的时间明细表

具体步骤如下:

第一步:行转列,标记在线、下线状态

状态标记:st时间记为 1,et时间记为-1 (et时表示下播,取-1)

sql">select user_id, start_time dt, 1 statusfrom aunion allselect user_id, end_time dt, -1 statusfrom a

 

第二步:求对应时点处累计人数,及对应时段

sql">select user_id,dt start_time,sum(status) over(order by dt) acc_cnt,lead(dt) over(order by dt) end_time
from
(select user_id, start_time dt, 1 statusfrom aunion allselect user_id, end_time dt, -1 statusfrom a) t

第三步:筛选出累计人数大于0的结果,获取最终结果

sql">select user_id, start_time, end_time, acc_cnt
from (select user_id, dt                             start_time, sum(status) over (order by dt) acc_cnt, lead(dt) over (order by dt)    end_timefrom (select user_id, start_time dt, 1 statusfrom aunion allselect user_id, end_time dt, -1 statusfrom a) t) t

 

3 小结

如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:
数字化建设通关指南
专栏 原价99,现在活动价39.9,十一国庆后将上升至59.9,最后一波需要的赶紧冲,最终按照阶梯式增长,直到恢复原价。

主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

 ​​​​​​数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

 


http://www.ppmy.cn/ops/122050.html

相关文章

UE5.4.3 Replay 重播回放系统

工程的配置文件DefaultEngine.ini中需要加入 +NetDriverDefinitions=(DefName=“DemoNetDriver”,DriverClassName=“/Script/Engine.DemoNetDriver”,DriverClassNameFallback=“/Script/Engine.DemoNetDriver”) 此步骤将启用并加载DemoNetDriver .ini添加示例 [/Script/En…

5QI(5G QoS Identifier)

5QI(5G QoS Identifier,5G 服务质量标识符)是在5G网络中用于定义特定数据流所需服务级别的指标。它用于优先处理流量,并根据流量的类型及其特定需求分配网络资源。5QI值从1到255,每个值对应一组QoS参数,这些…

前端Vue项目的自动打包、上传与部署

文章目录 前言思路与流程脚本实现1. 打包前端项目2. 上传前端项目4. 传递密码5. 代码优化完整脚本结语前言 在实际项目开发中,并不是所有项目都会配置 CI/CD 流程,特别是在中小型团队或者公司内部测试环境中,很多时候我们仍然需要手动打包、上传和部署项目。这个过程虽然简…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

isinstance()学习

aa {} if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,int):print("是")aa [] if isinstance(aa,list):print("list")aa [1,2,3] if isinstance(aa,list):print("list"…

3分钟学会下载 blender

1. blender简介 Blender是一款开源的3D创作套件,它由Blender Foundation维护,并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点&#xff1a…

Safari 浏览器中的 <audio> 标签的控件无效 - 解决方法

Safari 浏览器中的 <audio> 标签的控件无效&#xff0c;可能是由以下几个原因导致的&#xff1a; 1. HTML 代码问题 确保 HTML 代码中正确使用了 <audio> 标签&#xff0c;并且 controls 属性被正确设置。一个简单的例子如下&#xff1a; <audio controls>…

【重学 MySQL】五十一、更新和删除数据

【重学 MySQL】五十一、更新和删除数据 更新数据删除数据注意事项 在MySQL中&#xff0c;更新和删除数据是数据库管理的基本操作。 更新数据 为了更新&#xff08;修改&#xff09;表中的数据&#xff0c;可使用UPDATE语句。UPDATE语句的基本语法如下&#xff1a; UPDATE ta…