Hive(15)中使用sum() over()实现累积求和和滑动求和

本文介绍了SQL中的row_number(),rank(),dense_rank()排序函数与over()窗口函数的使用,重点讲解了如何实现数据的累积求和和滑动求和,以员工销售业绩为例,展示了具体代码和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有任何不理解或者不懂的地方进行评论,博主看到第一时间进行解答!!!

目的:实现累积求和和滑动求和

三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此,本文咱们来介绍如何实现累计求和和滑动求和。

样例:

一、数据介绍

三列数据,分别是员工的姓名、月份和销售额
在这里插入图片描述

功能:对每个员工的销售业绩的累积求和以及滑动求和(每个月计算其最近三个月的总销售业绩)

二、累积求和

1. 语法:

sum(需要求和的列) over(partition by 分组列 order by 排序列 asc/desc)

2. 代码:
select
	 *,
	 sum(cnt
### Hive 窗口函数使用指南 Hive 窗口函数是一种强大的工具,允许在不丢失原始数据行的前提下进行复杂的分组排序运算。它们与传统的 `GROUP BY` 不同,后者会将相同键值的多条记录聚合成单条记录,而窗口函数则保留输入数据的所有行数。 #### 1. 窗口函数基本概念 窗口函数的核心在于其能够基于一组数据(即“窗口”)执行计算,并为每一行返回相应的结果。这种能力使得它可以轻松处理诸如累计求和、排名等问题。 ##### 1.1 OVER 子句的作用 OVER 子句定义了窗口边界以及如何分区排序数据。它的存在区分了普通的聚合函数窗口函数的应用方式。 ```sql function_name(...) OVER ([partition_by_clause] [order_by_clause] [frame_clause]) ``` - **PARTITION BY**: 类似于 GROUP BY,但它不会减少行的数量;它只是指定了要独立应用函数的小范围或部分数据集。 - **ORDER BY**: 定义了应用于 PARTITION 内部元素的具体顺序。 - **FRAME CLAUSE**: 进一步细化哪些行应被纳入到当前行的计算当中去。(可选) #### 2. 常见类型的窗口函数 ##### 2.1 聚合类 这些函数类似于标准 SQL 中的标准聚集操作符,但是当它们出现在 WINDOW 函数上下文中时,会产生不同的效果——因为它们现在作用在一个滑动视图之上而不是整个表/子查询的结果集上。 - SUM(): 计算累积。 - AVG(), MIN(), MAX(): 分别给出平均值、最小值最大值。 示例: 假设有一个交易日志表 `trade`[^4]: ```sql SELECT user_id, trade_date, trade_num, SUM(trade_num) OVER(PARTITION BY user_id ORDER BY trade_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total FROM trade; ``` 这里我们按用户 ID 划分子集并对每个用户的每次购买都累加起来形成一个运行总计列[^5]. ##### 2.2 排名类 此类别的成员帮助确定某一行在其所属群体内的相对位置。 - RANK() - DENSE_RANK() - ROW_NUMBER() 举例来说如果想找出每个月销售额最高的几位员工可以用下面这段代码片段来实现: ```sql SELECT employee_id,sale_amount,SUM(sale_amount) as monthly_sales,RANK() OVER (PARTITION BY month_key ORDER BY sale_amount DESC ) rank FROM sales GROUP BY employee_id ,month_key ORDER BY month_key ASC ; ``` ##### 2.3 其他类别 除了上述两类之外还有一些特殊的用途比如LAG / LEAD用来访问相邻行的数据等等. #### 总结 通过合理运用Hive提供的各种窗口函数我们可以极大地简化复杂查询过程同时提升数据分析效率.[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个天蝎座白勺程序猿

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值