当前位置:   article > 正文

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

hive sum over

目的:

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

1、数据介绍

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

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

2、累积求和

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

代码:

select
	 *,
	 sum(cnt) over(partition by name order by month) as total_cnt
from
	 default.salerinfo
  • 1
  • 2
  • 3
  • 4
  • 5

结果:
在这里插入图片描述

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. 如在本例中,我们想要求每个月对应的最近三个月的业绩之和(包含本月在内),代码如下:

select
	 *,
	 sum(cnt) over(partition by name order by month range between 2 preceding and 0 following) as total_cnt
from
	 default.salerinfo
  • 1
  • 2
  • 3
  • 4
  • 5

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

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
  • 3
  • 4
  • 5

1和2结果如下:
在这里插入图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/451497
推荐阅读
相关标签