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

目的:

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

1、数据介绍

三列数据,分别是员工的姓名、月份和销售额

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

2、累积求和

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

代码:

sql 复制代码
select
	 *,
	 sum(cnt) over(partition by name order by month) as total_cnt
from
	 default.salerinfo

结果:

3、滑动求和

累积求和还是比较简单的,滑动求和就需要用到over中的另一用法了:、

语法:
sum(需要求和的列) over(partition by 分组列 order by 排序列 range between ... and ...)

这里需要在over函数中使用range between and指定窗口的大小,向前使用preceding,向后使用following。如2 preceding and 1 following指定的窗口包括当前行、当前行前面两行以及当前行后面一行,总共4行。

注:下面代码中字段 month 必须是整数

1. 如在本例中,我们想要求每个月对应的最近三个月的业绩之和(包含本月在内),代码如下:

sql 复制代码
select
	 *,
	 sum(cnt) over(partition by name order by month range between 2 preceding and 0 following) as total_cnt
from
	 default.salerinfo

2. 如果不想写0 following,另一种更为合适的写法是使用current row:

sql 复制代码
select
	 *,
	 sum(cnt) over(partition by name order by month range between 2 preceding and current row) as total_cnt
from
	 default.salerinfo

1和2结果如下:

码字不易,喜欢请点赞,谢谢!!!😊

参考:
https://blog.csdn.net/abcdefg90876/article/details/105190396/
http://www.taodudu.cc/news/show-537160.html?action=onClick

相关推荐
yumgpkpm11 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
sunxunyong12 小时前
hs2偶发连接失败问题处理
hadoop
陈年老古董15 小时前
Hive 函数学习笔记(上):单行函数与炸裂函数
hive·笔记·学习
真上帝的左手19 小时前
27. 数据产品-数据中台架构规划
数据仓库·架构·数据分析·数据中台
陈年老古董20 小时前
Hive 分区表学习笔记:语法、操作、二级分区与动态分区
hive·笔记·学习
省钱兄--zs20 小时前
24小时自助健身房系统软件开发实战:从架构设计到部署全指南
java·数据仓库·spring boot·系统架构·需求分析
计算机毕业编程指导师20 小时前
大数据毕设选题推荐:基于Hadoop+Spark全球碳排放减排策略分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·碳排放减排
53488736abcdefg2 天前
Hive 入门&架构原理
hive·hadoop·架构
泡干脆面就番茄2 天前
Hadoop基础入门到实战:从Python理解MapReduce到HDFS架构与集群搭建
hadoop
磁场转动100万匹2 天前
Hive 学习第一天:搞懂它是什么,并搭好可用的环境
hive·hadoop·学习