Hive开窗函数的进阶SQL案例
一、开窗函数基础
1. 定义与作用
开窗函数(Window Functions)在保留原始行数据的同时,对分组内的行进行聚合或排序分析,常用于累计计算、排名、移动平均等场景。与普通聚合函数(如SUM
、AVG
)的区别在于:
- 普通聚合函数:每组返回一行(行数减少)。
- 开窗函数:每组返回多行(保留原始行数)。
2. 核心语法结构
函数名() OVER ([PARTITION BY 列1, 列2...] -- 分组依据[ORDER BY 列A [ASC|DESC]] -- 排序依据[ROWS BETWEEN 范围] -- 窗口范围
)
- **
PARTITION BY
**:按列分组,函数在每个分组内独立计算(如按省份分组)。 - **
ORDER BY
**:分组内按列排序,影响窗口范围逻辑(如时间升序)。 - **
ROWS BETWEEN
**:指定窗口边界,常见选项如下表:
范围关键字 | 含义 |
---|---|
UNBOUNDED PRECEDING | 起点行(分区第一行) |
CURRENT ROW | 当前行 |
n PRECEDING | 前n行 |
n FOLLOWING | 后n行 |
UNBOUNDED FOLLOWING | 终点行(分区最后一行) |
默认行为说明:
- 仅用
PARTITION BY
→ 窗口为整个分组(UNBOUNDED PRECEDING TO UNBOUNDED FOLLOWING
)。PARTITION BY + ORDER BY
→ 窗口为起点到当前行(UNBOUNDED PRECEDING TO CURRENT ROW
)
二、累计计算场景
1. 年度招聘人数累加
WITH t1 AS (SELECT SUBSTR(hiredate, 1, 4) AS year FROM emp
),
t2 AS (SELECT year, COUNT(*) AS cnt FROM t1 GROUP BY year
)
SELECT year, cnt,SUM(cnt) OVER (ORDER BY year) AS cumulative_cnt -- 按年份滚动累加
FROM t2;
结果说明:
year | cnt | cumulative_cnt |
---|---|---|
2023 | 50 | 50 |
2024 | 80 | 130 |
2025 | 70 | 200 |
三、排名分析场景
3. 并列排名处理
SELECT name, class, score,ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num, -- 连续唯一序号RANK() OVER (ORDER BY score DESC) AS rank, -- 并列跳号(1,1,3)DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank -- 并列不跳号(1,1,2)
FROM Scores;
排名函数对比:
分数 | row_num | rank | dense_rank |
---|---|---|---|
95 | 1 | 1 | 1 |
95 | 2 | 1 | 1 |
90 | 3 | 3 | 2 |
四、移动计算场景
4. 1日移动平均销售额
SELECT shop, day, sales,AVG(sales) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW -- 限定窗口为当前行及前2行) AS avg_3day
FROM daily_sales;
结果片段:
day | sales | avg_3day |
---|---|---|
2025-01-01 | 200 | 200.0 |
2025-01-02 | 300 | 250.0 |
2025-01-03 | 250 | 250.0 |
4. 2相邻行差值计算
SELECT record_date, temperature,temperature - LAG(temperature, 1) OVER (ORDER BY record_date) AS diff -- 今日与昨日温差
FROM weather;
五、连续行为分析
5. 用户连续登录统计
-- 步骤1:生成连续性标识
WITH t1 AS (SELECT user_id, login_date,DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY) AS grpFROM logins
)
-- 步骤2:聚合连续区间
SELECT user_id,MIN(login_date) AS start_date,MAX(login_date) AS end_date,COUNT(*) AS consecutive_days
FROM t1
GROUP BY user_id, grp;
输出说明:
user_id | start_date | end_date | consecutive_days |
---|---|---|---|
1001 | 2025-01-01 | 2025-01-05 | 5 |
1001 | 2025-01-07 | 2025-01-08 | 2 |
六、高级偏移分析
6.1 会话最新未读消息提取
WITH RankedMessages AS (SELECT from_id, to_id, msg, isRead, time,ROW_NUMBER() OVER (PARTITION BY from_id, to_id ORDER BY time DESC) AS rn -- 按会话分组,时间倒序排FROM chat_history
)
SELECT from_id, to_id, msg
FROM RankedMessages
WHERE rn = 1 AND isRead = 0; -- 取最新且未读的消息
6.2 计算登录间隔天数
SELECT user_id, start_date, end_date,DATEDIFF(start_date, LAG(end_date, 1) OVER (PARTITION BY user_id ORDER BY start_date)) - 1 AS gap_days -- 本次开始日期与上次结束日期的间隔
FROM login_sessions;
七、分区聚合控制
7. 动态计算组内极值
SELECT id, val,MAX(val) OVER (PARTITION BY id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS group_max -- 分组内全局最大值
FROM test;
结果特点:同一分组的所有行显示相同的最大值。
附:核心函数适用场景总结
场景 | 推荐函数 | 关键子句 |
---|---|---|
累计求和 | SUM() OVER(ORDER BY) | ORDER BY 定义累加顺序 |
组内排名 | DENSE_RANK() OVER(PARTITION BY) | PARTITION BY 分组依据 |
移动平均 | AVG() OVER(ROWS BETWEEN n PRECEDING) | ROWS BETWEEN 限定窗口范围 |
相邻记录比较 | LAG()/LEAD() | 偏移量参数控制前后行 |
连续性行为分析 | ROW_NUMBER() + 日期差值 | 生成连续性标识列 |
提示:实际开发中需注意
- 性能优化:避免全分区无边界窗口(如
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
),优先用ROWS
限定物理范围- 空值处理:
LAG/LEAD
的第三个参数可设置默认值(如LAG(col,1,0)
)
相关文章:
Hive开窗函数的进阶SQL案例
一、开窗函数基础 1. 定义与作用 开窗函数(Window Functions)在保留原始行数据的同时,对分组内的行进行聚合或排序分析,常用于累计计算、排名、移动平均等场景。与普通聚合函数(如SUM、AVG)的区别…...

【JJ斗地主-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …...

《绩效管理》要点总结与分享
目录 绩效管理与目标设定 绩效管理的循环:PDCA 绩效目标的设定要点 绩效设定的工具:SMART法则 绩效跟踪与评估 刻板印象:STAR法 晕轮效应:对比评价法 近因效应:关键事项评估表 绩效面谈 面谈前准备工作 汉堡…...

Microsoft前后端不分离编程新风向:cshtml
文章目录 什么是CSHTML?基础语法内联表达式代码块控制结构 布局页面_ViewStart.cshtml_Layout.cshtml使用布局 模型绑定强类型视图模型集合 HTML辅助方法基本表单验证 局部视图创建局部视图使用局部视图 高级特性视图组件依赖注入Tag Helpers 性能优化缓存捆绑和压缩…...

【评测】用Flux的图片文本修改的PS效果
【评测】Flux的图片文本修改的PS效果 1. 百度图库找一张有英文的图片 2. 打开https://playground.bfl.ai/image/edit上传图片 3. 输入提示词 “change brarfant to goodbeer” 图片的文字被修改了...
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统 1. MS-DOS的历史背景1.1 诞生背景1.2 发展历程1.3 与Windows的关系 2. MS-DOS的技术细节2.1 系统架构2.2 启动过程2.3 内存管理2.4 设备驱动程序 3. MS-DOS的用户界面3.1 命令行界面3.2 配置文件 4. MS-DOS的应用程序与…...

数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20250607)
数据库管理334期 2024-06-07 数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20240607)1 环境与安装介质2 操作标准系统配置2.1 关闭防火墙2.2 关闭SELinux2.3 关闭avahi-daemon2.4 时间同步配置 3 存储服务器配置3.1 配置本地yum源3.2 安装…...
springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
文章目录 前言一、网关gateway选型1. 响应式编程模型2. 网关的特定需求3. 技术栈一致性4. 性能对比5. 实际应用场景优势 二、redis的集成1.引入库2.配置类A、自定义配置类RedisAfterNacosAutoConfigurationB、自定义配置类RedisConfig 总结 前言 最近在搭建最新的springCloud …...

AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
有一个markdown格式的文档,手头只有notepad的MarkdownPanel插件可以预览,但是只能预览,不能直接转换为html文件下载,直接复制预览的内效果又不太好,度娘也能找到很多工具,但是都需要在线使用。所以考虑用AI…...

机器学习:load_predict_project
本文目录: 一、project目录二、utils里的两个工具包(一)common.py(二)log.py 三、src文件夹代码(一)模型训练(train.py)(二)模型预测(…...
OkHttp 3.0源码解析:从设计理念到核心实现
本文通过深入分析OkHttp 3.0源码,揭示其高效HTTP客户端的实现奥秘,包含核心设计理念、关键组件解析、完整工作流程及实用技巧。 一、引言:为什么选择OkHttp? 在Android和Java生态中,OkHttp已成为HTTP客户端的标准选择…...

【storage】
文章目录 1、RAM and ROM2、DRAM and SRAM2、Flash Memory(闪存)4、DDR and SPI NOR Flash5、eMMC6、SPI NOR vs SPI NAND vs eMMC vs SD附录——prototype and demo board附录——U盘、SD卡、TF卡、SSD参考 1、RAM and ROM RAM(Random Acce…...
微信小程序带参分享、链接功能
分享链接的功能是右上角点...然后复制链接,可以直接点击 #小程序://**商城/p5XqHti******* 这种链接直接从其他地方跳转到小程序 wx.onCopyUrl(() > {return {query: "shareCode" this.shareCode,}; }); query就是参数,直接在onload里…...

JVM 垃圾回收器 详解
垃圾收集器 SerialSerial Old:单线程回收,适用于单核CPU场景ParNewCMS:暂停时间较短,适用于大型互联网应用中与用户交互的部分Paraller ScavengeParallel Old:吞吐量高,适用于后台进行大量数据操作G1&#…...

FreeRTOS任务之深入篇
目录 1.Tick1.1 Tick的概念1.2 Tick与任务调度1.3 Tick与延时函数 2.任务状态2.1 运行状态 (Running)2.2 就绪状态 (Ready)2.3 阻塞状态 (Blocked)5.4 暂停状态 (Suspended)2.5 特殊状态:删除状态 (Deleted)5.6 任务状态转换2.7 实验 3.Delay函数3.1 两个函数3.2 实…...

Linux 系统、代码与服务器进阶知识深度解析
在数字化时代,Linux 系统凭借其开源、稳定、安全的特性,成为服务器领域和软件开发的核心支柱。除了算法优化技巧,Linux 系统在网络服务、容器化技术、服务器安全等方面也蕴含着丰富的知识和实用技术。接下来,我们将深入探讨这些领…...

人工智能--AI换脸
本文实现了一个简易的人脸交换程序,主要功能包括:1)检查所需的模型文件是否存在;2)使用预训练的Caffe模型检测图像中的人脸;3)将源图像的人脸区域通过泊松融合无缝地替换到目标图像上。程序通过OpenCV的DNN模块加载人脸检测模型&a…...

NLP学习路线图(二十七):Transformer编码器/解码器
一、Transformer概览:抛弃循环,拥抱注意力 传统RNN及其变体(如LSTM、GRU)处理序列数据时存在顺序依赖的瓶颈:必须逐个处理序列元素,难以并行计算,且对长程依赖建模能力较弱。Transformer的革命…...

【机器学习】支持向量机实验报告——基于SVM进行分类预测
目录 一、实验题目描述 二、实验步骤 三、Python代码实现基于SVM进行分类预测 四、我的收获 五、我的感受 一、实验题目描述 实验题目:基于SVM进行分类预测 实验要求:通过给定数据,使用支持向量机算法(SVM)实现分…...
策略模式实战:Spring中动态选择商品处理策略的实现
概念 可以在运行时期动态的选择需要的具体策略类,处理具体的问题 组成元素 策略接口 public interface GoodsStrategy {void handleGoods(); } 具体策略类 Service(Constants.BEAN_GOODS) public class BeanGoodsStrategy implements GoodsStrategy {Override…...
主流信创数据库对向量功能的支持对比
主流信创数据库对向量功能的支持对比 版本支持对比向量索引支持对比距离函数支持对比使用限制对比OceanBase向量数据库GaussDB向量数据库TiDB向量数据库VastBase向量数据库 ⭐️ 本文章引用数据截止于2025年5月31日。 版本支持对比 数据库产品支持向量功能的版本OceanBaseOce…...
Matlab | matlab中的画图工具详解
二维图形到高级三维可视化 **一、基础二维绘图****二、三维可视化****三、图形修饰工具****四、高级功能****五、交互式工具****六、面向对象绘图(推荐)****七、常用技巧****学习资源**在MATLAB中,画图工具(绘图功能)是其核心优势之一,涵盖从基础二维图形到高级三维可视化…...

HA: Wordy靶场
HA: Wordy 来自 <HA: Wordy ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128,靶场IP192.168.23.130 3,对靶机进行端口服务探…...
6.7本日总结
一、英语 复习默写list10list19,07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 本周结束线代第一讲和计组第二章,之后学习计网4.4,学完计网4.4之后开操作系…...

中国移动6周年!
基站超过250万个 网络规模全球最大、质量最优 覆盖全国96%人口 在全国率先实现乡乡双千兆 服务用户超5.7亿 网络上下行均值接入速率均居行业首位 行业应用快速推广,数量超5万个 3CC、RedCap、通感一体、 无线AI改造等技术成熟商用 客户品牌持续升级&#x…...
Svelte 核心语法详解:Vue/React 开发者如何快速上手?
在很多地方早就听到过svelte的大名了,不少工具都有针对svelte的配置插件,比如vite \ unocss \ svelte. 虽然还没使用过,但是发现它的star82.9k数很高哦,学习一下它与众不同的魔法。 这名字有点别扭,好几次都写错。 sve…...
Fullstack 面试复习笔记:HTML / CSS 基础梳理
Fullstack 面试复习笔记:HTML / CSS 基础梳理 之前的笔记: Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结Fullstack 面试复习笔记:项目…...

408第一季 - 数据结构 - 树与二叉树II
二叉树的先中后序遍历 理解 那主播,请问你有没有更快的遍历方式呢 有的,兄弟有的 以中序遍历为例啊 找左边有没有东西,左边没东西那它就自由了,就按上面的图举例子 A左边有东西,是B,B左边没东西…...
打卡第47天
作业:对比不同卷积层热图可视化的结果 核心差异总结 浅层卷积层(如第 1-3 层) 关注细节:聚焦输入图像的边缘、纹理、颜色块等基础特征(例:猫脸的胡须边缘、树叶的脉络)。热图特点:区…...

从上下文学习和微调看语言模型的泛化:一项对照研究
大型语言模型表现出令人兴奋的能力,但也可以从微调中表现出令人惊讶的狭窄泛化。例如,他们可能无法概括为简单的关系反转,或者无法根据训练信息进行简单的逻辑推理。这些未能从微调中概括出来的失败可能会阻碍这些模型的实际应用。另一方面&a…...