Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
一文彻底搞懂 ROW_NUMBER() 和 PARTITION BY
1. 引言
在处理大规模数据集时,Hive SQL 提供了强大的窗口函数(Window Function),如 ROW_NUMBER()
,用于为结果集中的每一行分配唯一的行号。当与 PARTITION BY
和 ORDER BY
结合使用时,ROW_NUMBER()
可以帮助解决许多复杂的分析任务,例如去重、排名和分页查询等。本文将详细介绍如何结合这三个元素来实现高效的SQL查询。
2. 语法结构
2.1 ROW_NUMBER()
- 定义:为分区内的每一行分配一个唯一的行号。
- 用法:
ROW_NUMBER() OVER ([PARTITION BY <expr_list>] ORDER BY <expr_list>)
2.2 PARTITION BY
- 作用:定义了窗口函数应用于哪些逻辑分组或分区。
- 字段意义:指定用来分组的列,所有具有相同值的行会被归入同一组。
- 示例:
PARTITION BY department_id
表示按部门ID分组。
2.3 ORDER BY
- 作用:确定行号分配的顺序。
- 字段意义:定义排序规则,可以是一个或多个字段,并可指定升序 (
ASC
) 或降序 (DESC
)。 - 示例:
ORDER BY salary DESC
按薪资从高到低排序。
3. 使用场景与实际案例
为了更好地展示 ROW_NUMBER()
结合 PARTITION BY
和 ORDER BY
的使用方法,还是要 show case 的,下面通过具体 🌰 来解释如何在不同的业务需求下应用这些功能。
3.1 数据去重
在某些情况下,数据集中可能存在重复记录,而我们只希望保留特定条件下的一条记录(如最新的记录)。这时可以使用 ROW_NUMBER()
来为每组记录分配行号,并选择行号为1的记录以达到去重的目的。
案例1:最新交易记录(按客户)
考虑一张名为
transactions
的表,包含以下字段:
trans_id
: 交易IDcustomer_id
: 客户IDamount
: 交易金额transaction_date
: 交易日期
需求:找出每位客户的最近一次交易记录。
具体操作如下:
WITH LatestTransactions AS (SELECT trans_id,customer_id,amount,transaction_date,ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY transaction_date DESC) as rnFROM transactions
)
SELECT trans_id,customer_id,amount,transaction_date
FROM LatestTransactions
WHERE rn = 1;
- 解释:
PARTITION BY customer_id
把所有交易按照客户分组;ORDER BY transaction_date DESC
确保每组内的交易按时间降序排列,因此最新的交易会获得行号1。
3.2 获取排名
当需要根据某个标准对数据进行排序并计算相对排名时,比如找出每个月销售额最高的前N名销售员或每个部门内薪资最高的员工,可以利用 ROW_NUMBER()
函数结合 PARTITION BY
和 ORDER BY
来实现。
案例2:员工薪资排名(按部门)
假设有一个名为
employees
的表,包含以下字段:
emp_id
: 员工IDname
: 员工姓名department_id
: 部门IDsalary
: 薪资
需求:为每个部门的员工按照薪资从高到低排序,并给出他们的排名。
具体操作如下:
WITH EmployeeRank AS (SELECT emp_id,name,department_id,salary,ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) as rankFROM employees
)
SELECT emp_id,name,department_id,salary,rank
FROM EmployeeRank;
- 解释:
PARTITION BY department_id
将数据分为不同部门的组;ORDER BY salary DESC
在每个部门内根据薪资从高到低排序。
案例3:月度销售冠军(按产品类别)
假设有如下表格
sales
,包含以下字段:
sale_id
: 销售记录IDproduct_category
: 产品类别salesperson
: 销售人员名字sales_amount
: 销售金额month
: 月份
需求:计算每个月每个产品类别的销售冠军。
具体操作如下:
WITH MonthlySalesLeaders AS (SELECT product_category,salesperson,month,sales_amount,ROW_NUMBER() OVER (PARTITION BY product_category, month ORDER BY sales_amount DESC) as rankFROM sales
)
SELECT product_category,salesperson,month,sales_amount
FROM MonthlySalesLeaders
WHERE rank = 1;
- 解释:
PARTITION BY product_category, month
创建了基于产品类别和月份的分区;ORDER BY sales_amount DESC
确保了每个分区内销售额最高的销售人员会被排在最前面。
3.3 分页查询
当处理大量数据时,可能需要分批次地展示结果集。例如,在网页上显示搜索结果时,通常每次只加载一部分数据。此时,可以通过 ROW_NUMBER()
来实现分页效果。
案例4:获取第101到200条记录
- 假设你有一个大表
large_table
,并且想要获取该表中第101到200条记录(假设表中有一列id
可以用来排序)。
具体操作如下:
WITH PaginatedData AS (SELECT *,ROW_NUMBER() OVER (ORDER BY id) as row_numFROM large_table
)
SELECT *
FROM PaginatedData
WHERE row_num BETWEEN 101 AND 200;
- 解释:这里使用
ROW_NUMBER()
为每一行分配一个唯一的行号,并通过WHERE
子句筛选出所需的分页范围。
通过上述场景和对应的案例,可以看到 ROW_NUMBER()
结合 PARTITION BY
和 ORDER BY
是多么强大且灵活。它不仅能够解决常见的数据分析问题,还能提高查询效率,使得复杂的数据处理变得更加直观和简便。
相关文章:
Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
一文彻底搞懂 ROW_NUMBER() 和 PARTITION BY 1. 引言 在处理大规模数据集时,Hive SQL 提供了强大的窗口函数(Window Function),如 ROW_NUMBER(),用于为结果集中的每一行分配唯一的行号。当与 PARTITION BY 和 ORDER …...
windows C++ TCP客户端
demo有一下功能 1、心跳包 2、断开重连 3、非阻塞 4、接受数据单独线程处理 #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <string> #include <process.h> // 用于Windows下的线程相…...
【C++】初识C++之C语言加入光荣的进化(上)
写在前面 本篇笔记作为C的开篇笔记,主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性,当然C是兼容C的,我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…...
Linux文件目录 --- 文件时间戳、atime、mtime、ctime、指定格式查看
三、文件时间戳 1. atime 文件最近被访问时间,是在读取文件或者执行文件时更改的,如果只cd进入一个目录然后cd . .不会引起atime的改变,要是使用ll命令进行查看后,再cd . . 离开就不同了。 2. mtime 文件最近内容修改时间,在目录中有文件…...
网页博客风格未完
实现类似的博客风格: 学习前端开发基础: HTML & CSS:掌握网页结构和样式设计的基础知识。JavaScript:增强网页的互动性和动态效果。响应式设计:确保您的博客在不同设备上都有良好的显示效果。 使用开源模板&#x…...
LeetCode 2545.根据第 K 场考试的分数排序:考察编程语言的排序
【LetMeFly】2545.根据第 K 场考试的分数排序:考察编程语言的排序 力扣题目链接:https://leetcode.cn/problems/sort-the-students-by-their-kth-score/ 班里有 m 位学生,共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数…...
软考:系统架构设计师教材笔记(持续更新中)
教材中的知识点都会在。其实就是将教材中的废话删除,语言精练一下,内容比较多,没有标注重点 系统架构概述 定义 系统是指完成某一特定功能或一组功能所需要的组件集,而系统架构则是对所有组件的高层次结构表示,包括各…...
安卓环境配置及打开新项目教程,2024年12月20日最新版
1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…...
基于Spring Boot的电影售票系统
一、系统概述 该系统采用Spring Boot框架开发,充分利用其简化配置、快速部署和生产级别的性能监控等特点,为电影售票业务提供高效、可靠的技术支持。同时,系统采用前后端分离架构,前端使用Vue.js等框架,后端使用Sprin…...
【linux】 unshare -user -r /bin/bash命令详解
命令解析 unshare -user -r /bin/bash 是一个 Linux 命令,它用于在新的用户命名空间中运行一个进程(在这个例子中是 /bin/bash)。以下是这个命令的详细解释: 【1. 命令解析】 unshare: unshare 是一个工具,用于从调用…...
uniappX 移动端单行/多行文字隐藏显示省略号
在手机端不能多行省略使用 -webkit-line-clamp 属性所以移动端多行省略不会生效改为 lines 属性即可 /**单行文本溢出显示省略号*/ .text-ov1 {white-space: nowrap;overflow: hidden;text-overflow: ellipsis;height: auto; } /**APP多行文本溢出显示省略号*/ // #ifdef APP-…...
uniApp打包H5发布到服务器(docker)
使用docker部署uniApp打包后的H5项目记录,好像和VUE项目打包没什么区别... 用HX打开项目,首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…...
谷歌Gemini与Anthropic Claude对比测试引发争议:AI竞赛暗流涌动
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
RAF认证的具体内容是什么?
RAF认证 Responsible Animal Fiber RAF认证,负责任动物纤维标准,是一个致力于确保动物福利、环境可持续性以及产品质量合规性的透明、可追溯和可信赖的认证体系。该体系不仅涵盖了动物纤维的生产和加工环节,还注重从源头到最终产品的整个供应…...
《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)及形态学处理
文章目录 《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)边界填充阈值处理图像平滑处理生成椒盐图片均值滤波处理方框滤波处理高斯滤波处理中值滤波处理 图像形态学腐蚀膨胀开运算闭运算顶帽和黑帽 《OpenCV计算机视觉》-对图片…...
Java字符串的|分隔符转List实现方案
字符串处理 问题背景代码实现代码优化原因分析实现方案 注意事项异常处理Maven未识别异常 问题背景 在项目组对账流程中,接收对方系统的对账文件,数据以|为分隔符,读取文件内容,分条入库。 代码实现 Java中将字符串转给list&am…...
【机器学习】当教育遇上机器学习:打破传统,开启因材施教新时代
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 教育是人类社会发展的基石,然而传统教育模式往往难以满足每个学生的个性化需求。随着机器学习技术的兴起,教…...
【FastAPI】日志
一、概述 FastAPI 是一个现代的、快速(高性能)的Web框架,用于构建API,基于Python类型提示。 日志记录是任何应用程序中不可或缺的一部分,它允许开发者追踪事件的发生、识别错误并了解系统的运行状态。 在 FastAPI 中&…...
faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-7
流程 代码 void IndexIVF::search(idx_t n,const float* x,idx_t k,float* distances,idx_t* labels,const SearchParameters* params_in) const {FAISS_THROW_IF_NOT(k > 0);const IVFSearchParameters* params nullptr;if (params_in) {params dynamic_cast<const I…...
ORA-65198 PDB clone 时 不能新加datafile 以及hang的一个原因
create pluggable database XX from SS keystore identified by "YYY" parallel 32 service_name_convert( _srv, _srv); 20TB 4小时 update /* rule */ undo$ set name:2,file#:3,block#:4,status$:5,user#:6,undosqn:7,xactsqn:8,scnbas:9,scnwrp:10,inst#:11,…...
大秦朝历史
大秦朝是中国历史上一个虚构的朝代,通常被认为是秦朝的后继者。根据一些历史小说和影视作品的描述,大秦朝被描绘为一个强大的中央集权国家,统一了整个中国。大秦朝的帝王被描述为英明神武,开创了繁荣富强的盛世。 根据这些虚构的…...
docker部署工业操作系统基础环境手册
在 Docker 上安装最新的 TDengine 数据库并将数据文件和配置文件映射到宿主机,可以按照以下步骤操作: 一、Tdengine 篇章 1. 拉取最新的 TDengine 镜像 首先,确保你的 Docker 环境已安装并运行。然后,使用以下命令拉取 TDengine…...
算法 class 003
二进制表示数 8位 有符号二进制位,能表示正数128位 ,0 ~ 127(2的7次方减1) ,能表示负数128位 ,-1 ~ -128。 n 位有符号二进制位,一共能表示 2的n次放个数,正数为0 ~ (2的n-1次方) - 1(再减1&…...
gcc和gcc -c区别
gcc 和 gcc -c 之间的主要区别在于编译过程的不同阶段以及最终生成的输出文件类型。理解这两者的区别对于有效地管理和构建项目非常重要。 ### gcc(默认行为) 当你使用 gcc 编译器而没有指定 -c 选项时,GCC 会执行整个编译链的所有步骤&…...
从一次线上故障聊聊接口自动化测试
1、背景 3月初,运营同事配置了个还未上线的页面到网站首页 banner,导致用户点了报错。尽管这次很明确是运营人为操作失误引起的故障,但过往此类核心页面的访问异常,我们已不是第一次遇见。 从平台整体利益触发,我们各…...
工业大数据分析算法实战-day15
文章目录 day15特定数据类型的算法工业分析中的数据预处理工况划分数据缺失时间数据不连续强噪声大惯性系统趋势项消除 day15 今天是第15天,昨日是针对最优化算法、规则推理算法、系统辨识算法进行了阐述,今日主要是针对其他算法中的特定数据类型的算法…...
QLocalServer本地进程通信发送数据丢失部分数据丢失解决方案
问题说明 Qt使用QLocalServer进行本地进程通信,发现数据随机丢失。例如,我需要连续发送7个数据,如果连续调用socket的write接口,会引起数据随机丢失,导致数据不完整。 解决方案 我这里的解决方案是,将7个…...
0.gitlab ubuntu20.04 部署问题解决
安装依赖: ① sudo apt-get update 出现: 解决方式: 去 /etc/apt/sources.list.d 这个目录删除或注释对应的list文件 第三方软件的源一般都以list文件的方式放在 /etc/apt/sources.list.d 这个目录 重新运行sudo apt-get update 安装…...
tomcat temp临时文件不清空,占用硬盘,jdk字体内存泄漏
JSP老旧项目迁移过来的代码,生成海报,会读取图片,读取字体文件,绘制图片,会生成大量临时文件,内存泄漏。 方案一,服务器定时删除temp临时文件夹 方案二,图片、字体改用静态类读取文件…...
元宇宙中的去中心化应用:Web3的未来角色
随着科技的快速发展,元宇宙已经成为了全球关注的焦点,成为一种新型的虚拟世界互动平台。与此同时,Web3作为新一代互联网技术,借助去中心化的理念,为元宇宙的发展提供了技术支撑。从虚拟互动到数字身份管理,…...
中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?
客户服务的个性化和标准化之间的矛盾一直是一个挑战。一方面,企业需要提供标准化的服务以保持运营效率和成本控制;另一方面,为了提升客户满意度和忠诚度,企业又必须满足客户的个性化需求。为此,中关村科金推出了智能客…...
【ROS2】坐标TF发布(动态)
1、创建目录 mkdir -p ~/ros/src/laoer_tf2、创建包 cd /home/laoer/ros/eg/src/cpp/laoer_tf ros2 pkg create --build-type ament_cmake laoer_tf \--dependencies rclcpp tf2_ros geometry_msgs \--license Apache-2.03、源码 3.1 TF消息TransformStamped 1)消息类型 …...
图解HTTP-HTTP状态码
状态码 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕4XXRedirection (重定向状态码)需要…...
SAP消息号 FD014 (抬头)没有指定国际标准货币代码 CNY
1、IDOC配置完成后, 2、业务下单-发货-开票(2张) 3、WE02 查看IDOC时发现 从报错看是货币代码设置问题。 4、解决: OY03 RMB和CNY同时勾选导致 RMB不勾选主要。...
GRUtopia:构建虚拟世界中的智能机器人社会
人工智能咨询培训老师叶梓 转载标明出处 人工智能讲师大模型讲师叶梓前沿技术分享:GRUtopia:构建虚拟世界中的智能机器人社会 随着Embodied AI(具身智能)领域的快速发展,对于能够在复杂环境中执行任务的机器人的需求日…...
华为:数字化转型只有“起点”,没有“终点”
上个月,我收到了一位朋友的私信,他询问我是否有关于华为数字化转型的资料。幸运的是,我手头正好收藏了一些,于是我便分享给他。 然后在昨天,他又再次联系我,并感慨:“如果当初我在进行企业数字…...
在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题
00 两种可行方法分别是: 使用数组存储每一位数据并进行进位运算:通过将大数按位拆分成数组,然后实现逐位加法、进位等操作。使用符号变量进行计算:将数值分成低位和高位,分别用符号变量进行计算。 01:使用…...
STM32 与 AS608 指纹模块的调试与应用
前言 在嵌入式系统中,指纹识别作为一种生物识别技术,广泛应用于门禁系统、考勤机、智能锁等场景。本文将分享如何在 STM32F103C8T6 开发板上使用 AS608 指纹模块,实现指纹的录入和识别功能。 硬件准备 STM32F103C8T6 开发板AS608 指纹模块…...
腾讯PHP经典面试题(附答案)
腾讯PHP经典面试题(附答案) PHP开发工程师笔试试卷 姓名:PHP 一、PHP开发部分 1.合并两个数组有几种方式,试比较它们的异同 答: 1、array_merge() 2、’’ 3、array_merge_recursive array_merge 简单的合并数…...
LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)
一、引言 1.1 医疗数据挖掘的重要性与挑战 在当今数字化医疗时代,医疗数据呈爆炸式增长,这些数据蕴含着丰富的信息,对医疗决策具有极为重要的意义。通过对医疗数据的深入挖掘,可以发现潜在的疾病模式、治疗效果关联以及患者的健康风险因素,从而为精准医疗、个性化治疗方…...
【PCIe 总线及设备入门学习专栏 1.1 -- PCIe 基础知识 lane和link介绍】
文章目录 OverivewLane 和 LinkRC 和 RPPCIe controllerPCIE ControllerPHY模块 Inbound 和 OutboundPCIe transaction modelPIODMAP2P Overivew PCIe,即PCI-Express总线(Peripheral Component Interconnect Express),是一种高速…...
PCDN 适合哪些人群?
家用宽带用户:对于家中有宽带,且宽带闲置时间较多的用户来说,PCDN是一个非常好的赚钱方式。只要你有足够的带宽和一台稳定的设备,就可以轻松参与。 小型网络运营者:如果你是小型网络运营者,拥有大量的闲置带宽资源PCDN 可以帮助你…...
C++之红黑树模拟实现
目录 红黑树的概念 红黑树的性质 红黑树的查找效率 红黑树的实现 红黑树的定义 红黑树节点的插入 红黑树的平衡调整 判断红黑树是否平衡 红黑树整体代码 测试代码 上期我们学习了AVL树的模拟实现,在此基础上,我们本期将学习另一个数据结构-…...
一分钟快速解读LEED绿色建筑认证
一分钟快速解读LEED绿色建筑认证——引领未来建筑绿色革命的风向标 LEED,全称为“Leadership in Energy and Environmental Design”,是美国绿色建筑委员会(USGBC)开发并推广的一套国际公认的绿色建筑评估体系。它如同一座灯塔&am…...
C# 语法糖集锦
文章目录 1、自动属性(Auto - Properties)2、对象和集合初始化器(Object and Collection Initializers)3、匿名类型(Anonymous Types)4、扩展方法(Extension Methods)5、Lambda 表达式(Lambda Expressions)6、空合并运算符(??)和空条件运算符(?.)7、隐式类型数…...
centos制作离线安装包
目录 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve 和 repotrack 都是与 YUM(Yellowdog Updater Modified…...
HTML5 学习资源
HTML5 学习资源 学习HTML5的资源丰富多样,以下是一些推荐的在线教程、书籍和社区论坛,帮助你更好地掌握HTML5。 11.1 在线教程和课程 MDN Web Docs: MDN HTML 教程提供详细的HTML5文档和实例,适合各个水平的开发者。 W3Schools…...
大模型(LLM)提示工程(Prompt Engineering)初识
大模型提示工程(Prompt Engineering)是指设计和优化给定任务的输入提示,以便从大型语言模型(如GPT-4、GPT-3等)中获得最佳输出。其核心目标是通过合理设计输入内容(提示词或提示结构)࿰…...
uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装
封装API接口 import {http} from ../utils/request.js export function login(code){return http({url:/wx/getSession,method: GET,data:{code}}) }调用接口 import {login,test,phoneMessage,updateAvatar} from ../../api/user.js function userLogin(){ login(code.value…...
web 渗透学习指南——初学者防入狱篇
目录 一、学习方向和基础知识二、知识点详细总结三、学习流程和典型案例 案例1:SQL注入漏洞检测与利用案例2:XSS攻击检测与利用案例3:文件上传漏洞利用案例4:CSRF攻击实现 四、常用工具推荐和使用方法五、初学者实用学习资源六、渗…...