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

【Hive 开发进阶】窗口函数深度解析:OVER/NTILE/RANK 实战案例与行转列高级技巧

一、窗口函数 OVER 详解

窗口函数用于在分组内进行数据排名、聚合计算等操作,语法格式:

函数名() over([partition by 分组字段] [order by 排序字段] [window子句])
案例:员工信息与部门平均工资
create table emp (id int,dept string,salary double
);select id, dept, salary,avg(salary) over(partition by dept) as 部门平均工资
from emp;
二、序列函数
1. NTILE(数据分桶)
-- 将消费记录按金额分成2桶
select id, amount,ntile(2) over(order by amount desc) as 桶号
from sales;
2. LAG 与 LEAD(前后行数据获取)
-- 查询顾客上次购买时间
select user_id, order_time,lag(order_time, 1, '无历史记录') over(partition by user_id order by order_time) as 上次购买时间
from orders;
3. FIRST_VALUE 与 LAST_VALUE
-- 获取每个班级最高分和最低分
select class, score,first_value(score) over(partition by class order by score desc) as 最高分,last_value(score) over(partition by class order by score) as 最低分
from stu_score;
三、排名函数
函数特点
ROW_NUMBER()顺序排名,无重复
RANK()并列排名,有空位
DENSE_RANK()并列排名,无空位
案例:班级成绩排名
select id, class, score,row_number() over(partition by class order by score desc) as rn_row,rank() over(partition by class order by score desc) as rn_rank,dense_rank() over(partition by class order by score desc) as rn_dense
from stu_score;

部分输出结果

idclassscorern_rowrn_rankrn_dense
1A95111
2A95211
3A90332
四、窗口子句(WINDOW 子句)
-- 计算当前行与前两行的消费总和
select user_id, order_time, amount,sum(amount) over(partition by user_id order by order_time rows between 2 preceding and current row) as 近3次消费总额
from orders;
五、综合实战:行转列进阶
-- 需求:将课程表转换为选修/未选修状态(中文显示)
select id,if(array_contains(collect_set(course), 'a'), '选修', '未选修') as a,if(array_contains(collect_set(course), 'b'), '选修', '未选修') as b
from courses group by id;

输出结果

idab
1选修选修
2选修未选修
3选修选修
http://www.lryc.cn/news/2385992.html

相关文章:

  • 在STM32上配置图像处理库
  • 【C++】vector容器实现
  • RocketMQ 深度解析:消息中间件核心原理与实践指南
  • 使用Docker Compose部署Dify
  • 基于 Vue3 与 exceljs 实现自定义导出 Excel 模板
  • 杰发科技AC7840——CSE硬件加密模块使用(1)
  • 前端地图数据格式标准及应用
  • threejs几何体BufferGeometry顶点
  • 向量数据库选型实战指南:Milvus架构深度解析与技术对比
  • java方法重写学习笔记
  • 解决WPF短暂的白色闪烁(白色闪屏)
  • 如何在Java中处理PDF文档(教程)
  • TensorBoard安装与基本操作指南(PyTorch)
  • 基于PyTorch的残差网络图像分类实现指南
  • 2025/5/25 学习日记 linux进阶命令学习
  • 【MPC控制 - 从ACC到自动驾驶】4 MPC的“实战演练”:ACC Simulink仿真与结果深度解读
  • 【时时三省】Python 语言----牛客网刷题笔记
  • OPENEULER搭建私有云存储服务器
  • PyQt学习系列10-性能优化与调试技巧
  • 卷积神经网络(CNN)深度讲解
  • Docker部署Zookeeper集群
  • 数据结构—(概述)
  • python打卡day34
  • 华为OD机试真题—— 流水线(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【数据架构01】数据技术架构篇
  • 【安全攻防与漏洞​】​​HTTPS中的常见攻击与防御​​
  • esp32cmini SK6812 2个方式
  • 【数据集】30 m地表温度LST数据集
  • 【CATIA的二次开发07】草图编辑器对象结构及应用
  • IT | 词汇科普手册Ⅱ