mysql-sql-练习题-2-窗口函数

ops/2024/10/18 3:21:37/

窗口函数

  • 访问量max sum
    • 建表
    • 窗口函数
    • 连接
  • 直播间人数 第1、3名
    • 建表
    • 排名+sum

访问量max sum

每个用户截止到每月为止,最大单月访问次数,累计到该月的总访问次数
在这里插入图片描述

建表

sql">create table visit(uid1 varchar(5) comment '用户id',month1 varchar(10) comment '月份',visit integer comment '访问量'
) comment '用户每月访问量';insert into visit
values('A','2000-01',33),('A','2000-02',10),('A','2000-03',38),('B','2000-01',30),('B','2000-02',15),('B','2000-03',44);

窗口函数

sql">select*,max(visit) over(partition by uid1 order by month1) visit_max, -- 加字段 窗口函数sum(visit) over(partition by uid1 order by month1) visit_sum -- 分组 1-当前行
from visit;select*,max(visit) over w visit_max,sum(visit) over w visit_sum
from visit -- 替代重复部分
window w as (partition by uid1 order by month1);

在这里插入图片描述

连接

sql">select*,(select max(visit) -- 加字段 输出maxfrom visit bwhere a.uid1 = b.uid1 and a.month1 >= b.month1) visit_max, -- 连接 聚合(select sum(visit)from visit bwhere a.uid1 = b.uid1 and a.month1 >= b.month1) visit_sum
from visit a;

直播间人数 第1、3名

在这里插入图片描述

建表

sql">create table room(live_id varchar(5) comment '直播间id',user_id varchar(3) comment '用户id',date_stamp varchar(17) comment '时间戳',entry_type varchar(6) comment '进入直播间状态:enter登陆 out退出'
) comment '直播间 人数峰值';insert into room
values('1','1','20220101 10:00:00','enter'),('1','2','20220101 10:00:00','enter'),('1','3','20220101 10:00:00','enter'),('1','1','20220101 10:01:00','out'),('1','4','20220101 10:01:01','enter'),('1','5','20220101 10:05:00','enter'),('1','6','20220101 10:05:50','enter'),('1','2','20220101 10:06:00','out'),('1','7','20220101 10:07:40','enter'),('1','3','20220101 10:09:00','out'),('2','12','20220101 10:00:00','enter'),('2','11','20220101 10:00:00','enter'),('2','11','20220101 10:01:00','out'),('2','14','20220101 10:01:01','enter'),('2','15','20220101 10:05:00','enter'),('2','16','20220101 10:05:50','enter'),('2','12','20220101 10:06:00','out'),('2','17','20220101 10:07:40','enter'),('2','18','20220101 10:07:50','out'),('2','19','20220101 10:08:01','enter'),('2','13','20220101 10:09:00','out');

排名+sum

sql">with tmp as(-- 3. if替换 为了sumselect*,if(entry_type = 'enter',1,-1) entry_iffrom room
),tmp1 as(-- 2. 每个时刻人数select*,sum(entry_if) over(partition by live_id order by date_stamp) count_entry -- 分组 1-当前行from tmp),tmp2 as(-- 1. 最值 排名select*,dense_rank() over(partition by live_id order by count_entry desc) dr from tmp1)
select *
from tmp2
where dr in (1,3);

在这里插入图片描述


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

相关文章

FPGA中乘除法运算实现途径

主要介绍在FPGA中实现乘除法的方式 准则 虽然verilog中可以直接写* 或者/来表示乘除,但建议不要这样使用。如果是一个比较简单的话,还可以勉强使用。但遇到浮点之类的,肯定不可以了 。 具体官方给出了三种方式: 1.采用左移或右移…

企业工厂如何逆风翻盘:VR全景打破多重桎梏

现阶段,制造业工厂面临的困境,就是用着上百万的设备,却赚着几毛钱的利润。传统的工厂参观方式也存在着很多的局限性,例如时间上不方便、不能实地参访、生产线具有隐患等,都会使得参观者不能深入地了解工厂的生产环境和…

Leetcode—1017. 负二进制转换【中等】(string列表初始化、反向迭代器)

2024每日刷题(120) Leetcode—1017. 负二进制转换 实现代码 class Solution { public:string baseNeg2(int n) {string ans;while(n ! 0) {ans to_string(n & 1);n -(n >> 1);}return ans.empty() ? "0": string{ans.rbegin(),…

【每日力扣】240. 搜索二维矩阵 II与48. 旋转图像

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 240. 搜索二维矩阵 II] 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff…

Android Widget开发代码示例详细说明

因为AppWidgetProvider扩展自BroadcastReceiver, 所以你不能保证回调函数完成调用后,AppWidgetProvider还在继续运行。 a. AppWidgetProvider 的实现 /*** Copyright(C):教育电子有限公司 * Project Name: NineSync* Filename: SynWidgetProvider.java * Author(S…

Kafka 3.x.x 入门到精通(02)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通(02)——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.1.1 解压文件2.1.2 安装ZooKeeper2.1.3 安装Kafka2.1.4 封装启动脚本 2.2 集群启动2.2.1 相关概念2.2.1.1 代理:Broker2.2.1.2 控制器:Controller …

uniapp项目中禁止横屏 ,app不要自动旋转 -,保持竖屏,uniapp取消重力感应

uniapp项目中禁止横屏 ,app不要自动旋转 -,保持竖屏,uniapp取消重力感应 1.适用于移动端,安卓和IOS,当即使手机打开了自动旋转的按钮,设置如下的代码后,页面依旧保持竖屏。 步骤一&#xff1a…

2路模拟音频光端机 JR-CA02

概述 JR-CA02光端机由发送机JR-CA02 Tansmitter和接收机JR-CA02 Receiver组成,通过一定距离长度的光纤相连接,传输2路Audio模拟音频(即1路立体声)。且每路音频分配输出。 JR-CA02光端机具有运行主要技术参数的监测功能&#xff…